• Leetcode 970. 强整数


    970. 强整数

     
     
    • 用户通过次数223
    • 用户尝试次数258
    • 通过次数231
    • 提交次数801
    • 题目难度Easy

    给定两个正整数 x 和 y,如果某一整数等于 x^i + y^j,其中整数 i >= 0 且 j >= 0,那么我们认为该整数是一个强整数

    返回值小于或等于 bound 的所有强整数组成的列表。

    你可以按任何顺序返回答案。在你的回答中,每个值最多出现一次。

    示例 1:

    输入:x = 2, y = 3, bound = 10
    输出:[2,3,4,5,7,9,10]
    解释: 
    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
    

    示例 2:

    输入:x = 3, y = 5, bound = 15
    输出:[2,4,6,8,10,14]
    

    提示:

    • 1 <= x <= 100
    • 1 <= y <= 100
    • 0 <= bound <= 10^6
    class Solution {
    public:
        vector<int> powerfulIntegers(int x, int y, int bound) {
            set<int> jihe;
            vector<int> ans;
            if(x == 1&&y == 1){
                if(bound < 2) return ans;
                else{
                    ans.push_back(2);
                    return ans;
                }
            }
            if(x == 1){
                for(int j=0;1+pow(y,j)<=bound;j++){
                    jihe.insert(1+pow(y,j));
                }
            }
            else{
                for(int i=0;pow(x,i) <= bound;i++){
                    if(y == 1){if(pow(x,i)+1<=bound)jihe.insert(pow(x,i)+1);}
                    else{
                        for(int j=0;pow(x,i)+pow(y,j)<=bound;j++){
                            jihe.insert(pow(x,i)+pow(y,j));
                        }
                    }
                }
            }
            vector<int> res;
            set<int>::iterator iter;
            for(iter = jihe.begin();iter != jihe.end();iter++){
                res.push_back(*iter);
            }
            return res;
        }
    };

    ————主要是第一个数是1比较烦

    我真的蠢,看别人的解法,只要加点限制就好了

    i = bound if x == 1 else x j = bound if y == 1 else y

    class Solution {
    public:
        vector<int> powerfulIntegers(int x, int y, int bound) {
            set<int> ans;
            vector<int> res;
            for(int i = 1; i<=bound; i = i*x){
                for(int j= 1; j<=bound;j = j*y){
                    if(i+j <=bound){
                        ans.insert(i+j);
                    }
                    if(y==1){
                        break;
                    }
                }
                if( x == 1){
                    break;
                }
            }
            
            for(auto tmp:ans){
                res.push_back(tmp);
            }
            return res;
        }
    };

    ——看看别人的,我特么写的是坨屎 啊

  • 相关阅读:
    存图---链式前向星
    Codeforces Round #664 (Div. 2)(A B C D)
    Go Running HDU
    Total Eclipse HDU
    Little W and Contest HDU
    2018 ICPC Asia Nanjing Regional Contest
    Codeforces Round #662 (Div. 2)(A B C D)
    Codeforces Round #661 (Div. 3)(A B C D E)
    素数判断(欧拉筛)
    网络流专题 模板 + 例题 (Going Home POJ
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10612448.html
Copyright © 2020-2023  润新知