Given two non-negative 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
Runtime: 9 ms, faster than 52.02% of Java online submissions for Powerful Integers.
class Solution { public static void init(List<Integer> A, int x, int bound){ if(x == 1){ A.add(1); return; } for(int i=0; ; i++){ int tmp = (int) Math.pow(x, i); if(tmp < bound){ A.add(tmp); }else break; } return ; } public List<Integer> powerfulIntegers(int x, int y, int bound) { List<Integer> arrx = new ArrayList<>(); List<Integer> arry = new ArrayList<>(); init(arrx, x, bound); init(arry, y, bound); Set<Integer> s = new HashSet<>(); for(int i=0; i<arrx.size(); i++){ for(int j=0; j<arry.size(); j++){ if(arrx.get(i) + arry.get(j) <= bound) s.add(arrx.get(i) + arry.get(j)); } } List<Integer> ret = new ArrayList<>(); Iterator<Integer> iter = s.iterator(); while(iter.hasNext()){ ret.add(iter.next()); } return ret; } }