118th LeetCode Weekly Contest Powerful Integers

Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some integers i >= 0 and j >= 0.

Return a list of all powerful integers that have value less than or equal to bound.

You may return the answer in any order.  In your answer, each value should occur at most once.

Example 1:

Input: x = 2, y = 3, bound = 10
Output: [2,3,4,5,7,9,10]
Explanation: 
2 = 2^0 + 3^0
3 = 2^1 + 3^0
4 = 2^0 + 3^1
5 = 2^1 + 3^1
7 = 2^2 + 3^1
9 = 2^3 + 3^0
10 = 2^0 + 3^2

Example 2:

Input: x = 3, y = 5, bound = 15
Output: [2,4,6,8,10,14]

Note:

  • 1 <= x <= 100
  • 1 <= y <= 100
  • 0 <= bound <= 10^6

emmm,暴力也能过哒

int poww(int a, int b) {
    int ans = 1, base = a;
    while (b != 0) {
        if (b & 1 != 0)
            ans *= base;
            base *= base;
            b >>= 1;
    }
    return ans;
}

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        int sum = 0;
        int r,l;
        vector<int>Ve;
        map<int,int>Mp;
        
        if(x == 1){
            r = bound;
        }
        else if(x!=1){
            r = log(bound)/log(x)+1;
        }
        if(y == 1){
            l =bound;
        }else if(y!=1){
            l = log(bound)/log(y)+1;
        }
        for(int i=0;i<=r;i++){
            for(int j=0;j<=l;j++){
                    sum = poww(x,i) + poww(y,j);
                    if(sum>bound) continue;
                    Mp[sum]++;
                  
                    if(Mp[sum]<=1){
                        
                        Ve.push_back(sum);
                    }
                  
            }
        }
        
        return Ve;
    }
};
原文地址:https://www.cnblogs.com/yinghualuowu/p/10228769.html