Powerful Integers by Bruteforce Algorithm using C++
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:169 次
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^2Example 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
C++ Bruteforce Algorithm to Compute the Powerful Integers
The edge cases are when x and y are equal to 1. We can use a set to store the unique powerful integers within the bound. If X = 1 or Y = 1, the time complexity is
. If both are 1, then the complexity is O(1) – as there is only 1 powerful integer, which is 1+1=2.
If neither X or Y is 1, the time complexity is
. The space complexity is the same the time complexity as each number to test may be a potential powerful integer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Solution { public: vector<int> powerfulIntegers(int x, int y, int bound) { unordered_set<int> data; int a, b; for (int i = 0; (a = pow(x, i)) <= bound; ++ i) { for (int j = 0; (b = a + pow(y, j)) <= bound; ++ j) { if (b <= bound) { data.insert(b); } else break; if (y == 1) break; } if (x == 1) break; } vector<int> res; std::copy(data.begin(), data.end(), std::back_inserter(res)); return res; } }; |
class Solution {
public:
vector<int> powerfulIntegers(int x, int y, int bound) {
unordered_set<int> data;
int a, b;
for (int i = 0; (a = pow(x, i)) <= bound; ++ i) {
for (int j = 0; (b = a + pow(y, j)) <= bound; ++ j) {
if (b <= bound) {
data.insert(b);
} else break;
if (y == 1) break;
}
if (x == 1) break;
}
vector<int> res;
std::copy(data.begin(), data.end(), std::back_inserter(res));
return res;
}
};And, if either X or Y is 1, we can break the loop – as 1 to the power of any will be still one, otherwise, it will be an endless loop. At last, we need to convert the set to std::vector in C++ and in this post, there are quite a few methods to do that.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:对个人站长的一些思考 一位个人站长的自白 2020疫情将过 个人站长能否有机会赚钱 这次疫情下对个人站长是机会吗? 站长赚钱需要做什么准备工作? 个人站长做个网站赚钱真是越来越难了 网站站长赚钱的七条经验分享 一道求比例尺的问题 欧拉的故事 分羊的故事
- 评论列表
-
- 添加评论