给定一个数n,如:23121,给定一组数字a如[2,4,9],求由a中元素组成的小于n的最大数。
#include<string>
#include<vector>
#include<iostream>
#include <algorithm>
using namespace std;
int ans;
int value = 14132;
string valueStr = to_string(value);
vector<int> nums = {1,4,9};
bool dfs(int index, bool judge, int temp) {
if(index == valueStr.size()) {
ans = temp;
return true;
}
if(judge) {
return dfs(index + 1, true, temp * 10 + (nums[nums.size() - 1]));
} else {
int val = valueStr[index] - '0';
for(int i = nums.size() - 1; i >= 0; --i) {
if(val == nums[i]) {
if(dfs(index + 1, false, temp * 10 + nums[i])) {
return true;
}
} else if (val > nums[i]) {
if(dfs(index + 1, true, temp * 10 + nums[i])) {
return true;
}
}
}
//最终结果为空
if(index != 0) {
return false;
}
//少了一位,显然小了
return dfs(index + 1, true, temp);
}
}
int main()
{
dfs(0, false, 0);
cout << ans << endl;
return 0;
}
posted on 2022-04-29 17:11 silenccfly 阅读(1123) 评论(0) 收藏 举报
浙公网安备 33010602011771号