今日学习记录
1. K 因数分解leetcode.3669
关键词:dfs 剪枝 回溯
问题分析:
- 分解为 k 个因数
- 这些因数的最大值和最小值的差要最小
- 其实直接看几个例子发现这个搭配有点随机,所以只能搜答案了
核心思路
- 可以先预处理所有的因数
- 暴力搜
**最终代码:
vector<int> minDifference(int n, int k) {
int min_df = INT_MAX;
vector<int> path(k),ans;
auto dfs = [&](this auto&& dfs,int i,int num,int mn,int mx)->void{
if(i==k-1){
int d = max(mx,num)-min(mn,num);
if(d<min_df){
min_df = d;
path[i] = num;
ans = path;
}
return;
}
for(int d:ds[num]){
path[i] = d;
dfs(i+1,num/d,min(mn,d),max(mx,d));
}
};
dfs(0,n,min_df,0);
return ans;
}学到的点:
- 搜索
- 回溯
2. 题目名称题目来源标号
关键词: 问题分析:
核心思路
最终代码:
学到的点: 1.