关注
贴一个回溯 + 剪枝 实际时间复杂度应该很低 每一位数最多两种可能O(2^9) 欢迎大佬指正
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
int solve(vector<int> nums, int n){
sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
int m = nums.size();
int res = 0;
string target = to_string(n);
int len = target.size();
function<bool(int)> dfs = [&](int x){
if(x == len && res < n){
if(res == 0) return false;
return true;
}
for(int i = m - 1; i >= 0; i --){
if(res + nums[i] * (int) pow(10, len - x - 1) >= n) continue;
res += nums[i] * (int)pow(10, len - x - 1);
// cout << res << "\n";
if(dfs(x + 1)) return true;
res -= nums[i] * (int)pow(10, len - x - 1);
}
if(x == 0){
res = 0;
if(dfs(x + 1)) return true;
}
return false;
};
if(dfs(0))
return res;
return -1;
}
int main() {
vector<int> nums = {6, 9, 3, 5};
cout << solve(nums, 56449) << "\n";
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届春招投递记录 #
22147次浏览 156人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
372900次浏览 2283人参与
# 我的求职总结 #
497438次浏览 6980人参与
# 你遇到过哪些神仙同事 #
145973次浏览 772人参与
# 27届实习投递记录 #
96281次浏览 989人参与
# 实习的内耗时刻 #
239499次浏览 1653人参与
# 你认为工作的意义是什么 #
290075次浏览 1595人参与
# 字节跳动笔试 #
102960次浏览 391人参与
# 拼多多工作体验 #
64267次浏览 444人参与
# 我是XXX,请攻击我最薄弱的地方 #
102227次浏览 660人参与
# Vibe Coding 会干掉初级岗位吗? #
53573次浏览 346人参与
# 拼多多集团-PDD笔试 #
106048次浏览 649人参与
# 你最近因为什么迷茫? #
101601次浏览 967人参与
# 面试中的破防瞬间 #
1270510次浏览 11144人参与
# 面试常问题系列 #
312043次浏览 4805人参与
# 总结:哪家公司面试体验感最好 #
91481次浏览 458人参与
# 英伟达工作体验 #
19444次浏览 137人参与
# 找实习记录 #
276093次浏览 1649人参与
# 美团秋招笔试 #
219788次浏览 1198人参与
# 牛油的搬砖plog #
209464次浏览 1340人参与
查看12道真题和解析