2023-05-02每日一题
一、题目编号
970. 强整数
二、题目链接
三、题目描述
给定三个整数 x 、 y 和 bound ,返回 值小于或等于 bound 的所有 强整数 组成的列表 。
如果某一整数可以表示为 xi + yj ,其中整数 i >= 0 且 j >= 0,那么我们认为该整数是一个 强整数 。
你可以按 任何顺序 返回答案。在你的回答中,每个值 最多 出现一次。
四、解题代码
class Solution {
public:
vector<int> powerfulIntegers(int x, int y, int bound) {
vector<int> xs;
vector<int> ys;
vector<int> res;
int i = 1;
int j = 1;
while(i <= bound){
xs.push_back(i);
i *= x;
if(x == 1){
break;
}
}
while(j <= bound){
ys.push_back(j);
j *= y;
if(y == 1){
break;
}
}
int hash[bound+5];
memset(hash, 0, sizeof(hash));
for(i = 0; i < xs.size(); ++i){
for(j = 0; j < ys.size(); ++j){
int temp = xs[i] + ys[j];
if(temp <= bound && hash[temp] == 0){
res.push_back(temp);
hash[temp] = 1;
}
}
}
return res;
}
};
五、解题思路
(1) 首先我们要理清楚什么是强整数,强整数就是可以被 xi + yj表达的数字。
(2) 我们通过(1) 中所描述的定义,又知晓x和y,所以先将所有可能的xi和yj全部存储起来,我们用xs和ys两个数组来存储xi和yj,xs和ys中的数字是一定不能超过bound的。。
(2) 接着开始用两层循环,找出所有不同的强整数即可。而判断的方式是用bound来判断是否超过上限,用哈希表来判断是否已经判断过该数字。如果超过了上限,或哈希表中已经标记了则不压入数组当中。