当前位置:网站首页>leetcode:254. 因子的组合
leetcode:254. 因子的组合
2022-08-04 14:31:00 【OceanStar的学习笔记】
题目来源
题目描述

class Solution {
public:
vector<vector<int>> getFactors(int n){
}
};
题目解析
题意
给定一个正整数n,写出所有的因子相乘的形式,而且规定了因子从小到大的顺序排列
思路
- 因为需要列出所有的情况,所以可以用回溯法来解决
- 由于题目中说明了1和n本身不能算其因子,那么可以从2开始遍历到n,如果当前的数i可以被n整除,说明i是n的一个因子,将其存入一位数组 out 中,然后递归调用 n/i,此时不从2开始遍历,而是从i遍历到 n/i
- 停止的条件是当n等于1时,如果此时 out 中有因子,将这个组合存入结果 res 中
class Solution {
public:
vector<vector<int>> getFactors(int n) {
vector<vector<int>> res;
helper(n, 2, {
}, res);
return res;
}
void helper(int n, int start, vector<int> out, vector<vector<int>>& res) {
if (n == 1) {
if (out.size() > 1) res.push_back(out);
return;
}
for (int i = start; i <= n; ++i) {
if (n % i != 0) continue;
out.push_back(i);
helper(n / i, i, out, res);
out.pop_back();
}
}
};

优化
class Solution {
public:
vector<vector<int>> getFactors(int n) {
vector<vector<int>> res;
helper(n, 2, {
}, res);
return res;
}
void helper(int n, int start, vector<int> out, vector<vector<int>> &res) {
for (int i = start; i <= sqrt(n); ++i) {
if (n % i != 0) continue;
vector<int> new_out = out;
new_out.push_back(i);
helper(n / i, i, new_out, res);
new_out.push_back(n / i);
res.push_back(new_out);
}
}
};
边栏推荐
猜你喜欢
随机推荐
word2003按空格键为什么会出现小数点
Makefile syntax and usage notes
代码随想录笔记_动态规划_1049最后一块石头的重量II
广告电商系统开发功能只订单处理
第六届未来网络发展大会,即将开幕!
【HMS core】【Media】【视频编辑服务】 在线素材无法展示,一直Loading状态或是网络异常
JCMsuite应用:倾斜平面波传播透过光阑的传输
oracle+RAC+linux5.1所需要安装的包
【问题解决】QT更新组件出现 “要继续此操作,至少需要一个有效且已启用的储存库”
CCF GLCC正式开营|九州云开源专家携丰厚奖金,助力高校开源推广
【历史上的今天】8 月 4 日:第一位图灵奖女性得主;NVIDIA 收购 MediaQ;首届网络安全挑战大赛完成
Why does the decimal point appear when I press the space bar in word 2003?
【剑指offer59】队列的最大值
16、学习MySQL 正则表达式
Crawler - basic use of selenium, no interface browser, other uses of selenium, cookies of selenium, crawler cases
xpath获取带命名空间节点注意事项
化算力为战力:宁夏中卫的数字化转型启示录
AOSP内置APP特许权限白名单
并发程序的隐藏杀手——假共享(False Sharing)
如何在ubuntu环境下安装postgresql并配置远程访问









