Leetcode 970. 强整数 - 双重循环指数加1,注意底数为1的情况

在这里插入图片描述
在这里插入图片描述
解法1

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        unordered_set<int> result;
        int num=0;
        for(int i=0;;i++)
            for(int j=0;;j++){
                num=pow(x,i)+pow(y,j);
                if(j==0&&num>bound) return result.ToArray(result.begin(),result.end());
                else if(num<=bound)
                    result.insert(num);
                else break; //退出j循环,i++
            }
        return result.toArray();
    }
};

在这里插入图片描述
解法2

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        unordered_set<int> result;
        int num=0;
        for(int i=0;;i++)
            for(int j=0;;j++){
                num=pow(x,i)+pow(y,j);
                if(j==0&&num>bound) {
                    vector<int> res(result.begin(),result.end());
                    return res;
                }
                else if(num<=bound)
                    result.insert(num);
                else break; //退出j循环,i++
            }
        vector<int> res(result.begin(),result.end());
                    return res;
    }
};

在这里插入图片描述
解法3

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        unordered_set<int> result;
     //   int num=0;
        for(int i=0;pow(x,i)<bound;i++)
            for(int j=0;pow(y,j)<=bound-pow(x,i);j++){
                result.insert(pow(x,i)+pow(y,j)); // 重复num
            }
        vector<int> res(result.begin(),result.end());
                    return res;
    }
};

还是超出时间限制。
原因是x=1或y=1时,i++, j++进入死循环

class Solution {
public:
    vector<int> powerfulIntegers(int x, int y, int bound) {
        unordered_set<int> result;
     //   int num=0;
        for(int i=0;pow(x,i)<bound;i++)
        {  for(int j=0;pow(y,j)<=bound-pow(x,i);j++){
                result.insert(pow(x,i)+pow(y,j)); // 重复num
                if(y==1) break; 
            }
         if(x==1) break;
        }
        vector<int> res(result.begin(),result.end());
                    return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值