难度中等28
给你两个正整数 n
和 k
。
如果正整数 i
满足 n % i == 0
,那么我们就说正整数 i
是整数 n
的因子。
考虑整数 n
的所有因子,将它们 升序排列 。请你返回第 k
个因子。如果 n
的因子数少于 k
,请你返回 -1
。
示例 1:
输入:n = 12, k = 3 输出:3 解释:因子列表包括 [1, 2, 3, 4, 6, 12],第 3 个因子是 3 。
示例 2:
输入:n = 7, k = 2 输出:7 解释:因子列表包括 [1, 7] ,第 2 个因子是 7 。
示例 3:
输入:n = 4, k = 4 输出:-1 解释:因子列表包括 [1, 2, 4] ,只有 3 个因子,所以我们应该返回 -1 。
提示:
1 <= k <= n <= 1000
进阶:
你可以设计时间复杂度小于 O(n) 的算法来解决此问题吗?
方法一:开数组(不知道为什么用例不能全过,哪位大佬能解决)
class Solution {
public:
int kthFactor(int n, int k) {
int a[1000];//开一个数组用于储存因子
int num=0,i=1;
while(i<n){
if(n%i==0)
a[num++]=i;//num用于数组下标变化
i++;
}
if(k<=num)
return a[k-1];//数组与集合不一样
else
return -1;
}
};
方法二:枚举法
class Solution {
public:
int kthFactor(int n, int k) {
int cnt=0;//cnt 用于记录因子的个数
for(int i=1;i<=n;i++){
if(n%i==0){
cnt++;
if(cnt==k)
return i;//i为第K个因子
}
}
return -1;
}
};
方法三:进阶