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

点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作,行业重要还是岗位重要? #
9887次浏览 155人参与
# 国企还是互联网,你怎么选? #
123392次浏览 958人参与
# 盲审过后你想做什么? #
13319次浏览 119人参与
# 潍柴工作体验 #
17210次浏览 17人参与
# 五一之后,实习真的很难找吗? #
48580次浏览 349人参与
# 外包能不能当跳板? #
22602次浏览 192人参与
# 央国企投递记录 #
79928次浏览 1318人参与
# 你觉得通信/硬件有必要实习吗? #
92742次浏览 891人参与
# 每人推荐一个小而美的高薪公司 #
72933次浏览 1358人参与
# 设计人如何选offer #
98848次浏览 691人参与
# 领导秒批的请假话术 #
10551次浏览 80人参与
# 五一假期,你打算“躺”还是“卷”? #
37478次浏览 484人参与
# 小厂实习有必要去吗 #
42510次浏览 260人参与
# 蚂蚁集团工作体验 #
10889次浏览 70人参与
# 应届生进小公司有什么影响吗 #
67399次浏览 984人参与
# 创作灵感 #
96703次浏览 1475人参与
# 一句话证明你在找工作 #
293636次浏览 2419人参与
# 面试等了一周没回复,还有戏吗 #
116642次浏览 1082人参与
# 实习生活中那些难忘的瞬间 #
100093次浏览 1783人参与
# 如果校招重来我最想改变的是 #
245605次浏览 2782人参与