LC 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

 

 

 

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;
  }
}

 

posted @ 2019-01-11 19:34  yuxihong  阅读(224)  评论(0编辑  收藏  举报