解题思路:
(1)动态规划,先对数组排序,因为按照下面这种方法,之前组合好的顺序不会变
(2)假设以numbers[i]及之前所有数字的字符串,最小为s[i]
(3)那么以numbers[i+1]及之前所有数字的字符串,最小为s[i+1]=min{s[i]+str[i+1],str[i+1]+s[i]}
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
sort(numbers.begin(),numbers.end());
string s = "",sw="";
for(auto w:numbers) {
sw = to_string(w);
if((sw+s).compare(s+sw)<0) s = sw+s;
else s = s+sw;
}
return s;
}
};
本文介绍了一种使用动态规划解决最小数串问题的方法。通过先对数组进行排序,然后迭代计算以每个数字开头的最小可能字符串,最终得到由整个数字数组构成的最小数串。该算法在每一步都选择当前最优解,确保整体解决方案的最小性。
&spm=1001.2101.3001.5002&articleId=105796013&d=1&t=3&u=cf792f9240b64b6dad86d466d87a1288)
1万+

被折叠的 条评论
为什么被折叠?



