leetCode——1492. n的第k个因子
通过万岁!!!
- 题目:给你一个数字n,然后找他的因子(n % i == 0),其实就是能够被n整除的数。然后是所有的数字排序后,返回第k个。
- 思路:简单思路就是for循环1到n么。我们得收集一下这些数组,然后数字不会重复,所以我们用set。然后还要排序,所以我们直接用treeSet。其次就是,如果n % i == 0。假设n / i ==j。那么j和i都是我们要找的数,所以一次计算,我们就找到了两个。还有就是如果i在set集合中,就直接continue,这样还能剪枝。然后再考虑一个问题,就是我我们真的需要到n-1么?举个栗子哈,如果这个数字是20,我们只需要把20加进去,然后for循环到10就好了。这样我们的时间又减少了一半。
- 技巧:treeSet,剪枝。
java代码
class Solution {public int kthFactor(int n, int k) {Set<Integer> treeSet = new TreeSet<>();treeSet.add(1);treeSet.add(n);// 这里原本其实要到n,但是其实可以简化下,到n/2for (int i = 2; i <= n / 2; i++) {if (treeSet.contains(i)) {continue;}if (n % i == 0) {treeSet.add(i);treeSet.add(n / i);}}if (treeSet.size() < k) {return -1;}return (int) Arrays.asList(treeSet.toArray()).get(k - 1);}
}
- 总结:题目不是特别复杂,就是需要把j也加进去,然后就是for循环只需要到n/2即可。