----思路:利用三个队列,一个存3,一个存5,一个存7.
然后,3*3的都放第一个。然后3*5,5*5的放第二个。然后,3*7,5*7,7*7的都放第三个。
答案:
public static int findKth(int k){ ArrayList<Integer> res = new ArrayList(); res.add(1); int flag = 0; int num = 0; int tmp = 0; Queue<Integer> queue3 = new LinkedList(); Queue<Integer> queue5 = new LinkedList(); Queue<Integer> queue7 = new LinkedList(); queue3.add(3); queue5.add(5); queue7.add(7); for(int i = 0; i < k; i++){ int min = 0; if(queue3.peek() < queue5.peek()){ if(queue3.peek() < queue7.peek()){ flag = 3; } else{ flag = 7; } } else{ if(queue5.peek() < queue7.peek()){ flag = 5; } else{ flag = 7; } } if(flag == 3){ tmp = queue3.poll(); queue3.add(tmp * 3); queue5.add(tmp * 5); queue7.add(tmp * 7); } else if(flag == 5){ tmp = queue5.poll(); res.add(tmp); queue5.add(tmp * 5); queue7.add(tmp * 7); } else if(flag == 7){ tmp = queue7.poll(); res.add(tmp); queue7.add(tmp * 7); } flag = 0; } return tmp; }