[Locked] Factor combinations
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:
- Each combination‘s factors must be sorted ascending, for example: The factors of 2 and 6 is
[2, 6]
, not[6, 2]
. - 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] ]
分析:
因子需要枚举出来,直接DFS
代码:
void dfs(int target, int start, vector<int> item, vector<vector<int> > &fc) { if(target == 1) { //去除num = num ( * 1)的分解情况 if(item.size() > 1) fc.push_back(item); return; } for(int i = start; i <= target; i++) { if(target % i == 0) { item.push_back(i); dfs(target / i, i, item, fc); item.pop_back(); } } return; } vector<vector<int> > factor(int num) { vector<int> item; vector<vector<int> > fc; dfs(num, 2, item, fc); return fc; }