Numbers can be regarded as product of its factors. For example,
8 = 2 x 2 x 2; = 2 x 4.
Write a function that takes an integer n and return all possible combinations of its factors.
Note:
- You may assume that n is always positive.
- Factors should be greater than 1 and less than n.
Examples:
input: 1
output:
[]input:
37
output:
[]input:
12
output:
[ [2, 6], [2, 2, 3], [3, 4] ]input:
32
output:
[ [2, 16], [2, 2, 8], [2, 2, 2, 4], [2, 2, 2, 2, 2], [2, 4, 4], [4, 8] ]
题解 :If the factor is bigger than sqrt(n), then it's next factor will be smaller than sqrt(n), so we only have to loop until the index reaches sqrt(n);
class Solution {
public:
vector<vector<int>> getFactors(int n) {
vector<int> tmp;
if(n==1) return res;
dfs(n,2,tmp);
return res;
}
void dfs(int cur,int start,vector<int>&tmp) {
if(cur==1) {
if(tmp.size()>0)
res.push_back(tmp);
return;
}
for(int i=start;i<=sqrt(cur);i++) {
if(cur%i==0) {
tmp.push_back(i);
tmp.push_back(cur/i);
res.push_back(tmp);
tmp.pop_back();
dfs(cur/i,i,tmp);
tmp.pop_back();
}
}
}
private:
vector<vector<int>> res;
};