关注
贴一个回溯 + 剪枝 实际时间复杂度应该很低 每一位数最多两种可能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";
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 哪些公司开提前批了? #
27899次浏览 268人参与
# 入职以后才知道的校招谎言 #
88687次浏览 583人参与
# 风评不好的公司,你会去吗? #
63571次浏览 450人参与
# 华子oc时间线 #
1244603次浏览 6487人参与
# 哪些公司校招卡第一学历 #
70409次浏览 280人参与
# 校招第一份工作你干了多久? #
95313次浏览 423人参与
# 实习如何「偷」产出? #
52956次浏览 1355人参与
# 除了主业以外,你还有哪些其他收入? #
12625次浏览 202人参与
# 不卡学历的大厂有哪些? #
30669次浏览 232人参与
# 机械人,你的第一份感谢信是谁给的 #
30612次浏览 310人参与
# 校招阶段,学历VS技术哪个更重要? #
18253次浏览 188人参与
# 职场新人体验 #
27284次浏览 251人参与
# 研究所笔面经互助 #
78583次浏览 483人参与
# 工作丧失热情的瞬间 #
294152次浏览 2372人参与
# 腾讯音乐求职进展汇总 #
98281次浏览 571人参与
# 你的秋招第一场笔试是哪家 #
148280次浏览 1485人参与
# 社恐入职新公司如何融入团队 #
12067次浏览 63人参与
# 华为开奖那些事 #
4094663次浏览 24608人参与
# 校园里的破防时刻 #
12026次浏览 128人参与
# Offer比较,你最看重什么? #
191887次浏览 1308人参与