解法一

从1到对n开方遍历求n的因子,另一半直接通过n/i求得。

  1. class Solution {
  2. public int kthFactor(int n, int k) {
  3. List<Integer> factors = new LinkedList<>();
  4. List<Integer> factors_ = new LinkedList<>();
  5. for (int i = 1; i <= Math.sqrt(n); ++i) {
  6. if (n % i == 0) {
  7. factors.add(i);
  8. if (i != n/i) {
  9. factors_.add(n / i);
  10. }
  11. }
  12. }
  13. Collections.reverse(factors_);
  14. factors.addAll(factors_);
  15. if (k > factors.size()) {
  16. return -1;
  17. } else {
  18. return factors.get(k - 1);
  19. }
  20. }
  21. }