整数可以被看作是其因子的乘积。
例如:
8 = 2 x 2 x 2;
= 2 x 4.
请实现一个函数,该函数接收一个整数 n 并返回该整数所有的因子组合。
注意:
你可以假定 n 为永远为正数。
因子必须大于 1 并且小于 n。
示例 1:
输入: 1
输出: []
示例 2:
输入: 37
输出: []
示例 3:
输入: 12
输出:
[
[2, 6],
[2, 2, 3],
[3, 4]
]
示例 4:
输入: 32
输出:
[
[2, 16],
[2, 2, 8],
[2, 2, 2, 4],
[2, 2, 2, 2, 2],
[2, 4, 4],
[4, 8]
]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/factor-combinations 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考题解区大力王
class Solution {
vector<vector<int>> ans;
public:
vector<vector<int>> getFactors(int n) {
return dfs(n, 2);
}
vector<vector<int>> dfs(int n, int div)//从div开始找因子
{
vector<vector<int>> factor, temp;
for(int i = div; i*i <= n; ++i)
{
if(n%i == 0)
{
factor.push_back({n/i,i});//因子
temp = dfs(n/i, i);//一个较大的因子,从较小的因子开始继续分割
for(auto f : temp)// n/i 分割后的因子组合f
{
f.push_back(i);//加上因子 i
factor.push_back(f);//完整的组合放入答案
}
}
}
return factor;//返回答案
}
};
0 ms 7.1 MB