Given two positive 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
class Solution {
vector<int> in={2};
bool isValid(int x,int y,int num)
{
if(x==1 && y==1) return num==2;
if(num==x+1 || num == y+1) return true;
int lenx=log(double(num))/log(double(x));
// cout <<lenx<<endl;
for(int i=0;i<=lenx;i++)
{
int tmp=num-pow(x,i);
if(tmp==0) return false;
if( pow(y,int(log(double(tmp))/log(double(y)))) ==tmp) return true;
}
return false;
}
public:
vector<int> powerfulIntegers(int x, int y, int bound) {
vector<int>res;
if(bound<2) return res;
if(x==1&& y==1)
{
res.push_back(2);
return res;
}
if(x<y) swap(x,y);
if(y==1)
{
bound-=1;
int lenx= log(double(bound))/log(double(x)) ;
for(int i=0;i<=lenx;i++)
res.push_back(pow(x,i)+1);
return res;
}
res.push_back(2);
for(int start=y+1;start<=bound;start++)
if(isValid(x,y,start))
res.push_back(start);
// cout<<isValid(x,y,bound)<<endl;
return res;
}
};
执行用时 :1084 ms, 在所有 C++ 提交中击败了5.60%的用户
内存消耗 :8.6 MB, 在所有 C++ 提交中击败了80.70%的用户
class Solution {
public:
vector<int> powerfulIntegers(int x, int y, int bound) {
if(bound<2) return vector<int>();
int xm= x==1 ? 1: log(double(bound))/log(double(x));
int ym = y==1? 1: log(double(bound))/log(double(y));
// cout<<xm<<" "<<ym<<endl;
unordered_set<int>all;
for(int i=0;i<=xm;i++)
{
for(int j=0;j<=ym;j++)
{
int tmp=pow(x,i)+pow(y,j);
// cout<<tmp<<endl;
if(tmp>bound)
break;
else
if(!all.count(tmp))all.insert(tmp);
}
}
return vector<int>(all.begin(),all.end());
}
};
执行用时 :4 ms, 在所有 C++ 提交中击败了91.60%的用户
内存消耗 :8.8 MB, 在所有 C++ 提交中击败了78.07%的用户