1. 程式人生 > >LeetCode 970. Powerful Integers

LeetCode 970. Powerful Integers

題目

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

 

分析

x^i + y^j <= bound; (1<=x<=100, 1<=y<=100, 0<=bound<=10^6)

注意i,j的範圍未知,不可以i,j迴圈。

簡單來說翻譯為 a + b <= bound (a=x^i, b=y^j);

那麼a,b的範圍是什麼呢?1<= a,b <= bound; a+b <= bound.

程式碼

class Solution {
    public List<Integer> powerfulIntegers(int x, int y, int bound) {
        Set<Integer> result = new HashSet<>();

        for (int a = 1; a < bound; a *= x) {
            for (int b=1; a + b <= bound; b *= y) {
                result.add(a + b);

                if(y == 1) {
                    break;
                }
            }

            if(x == 1) {
                break;
            }
        }

        return new ArrayList<>(result);
    }
}