1.高位的数字肯定是越小越好
2.放数字的顺序肯定是先放第一位(最左边一位)最小的元素,如果第一位相等,比较第二位…,以此类推。
3.我们如果把所有数字转换成字符串再排列
4.对所有的字符串进行比较
5.两个字符串s1,s2 如果 s1+ s2 > s2 + s1那么s1 > s2
比如s1为3,s2为30,因为 s1+s2 = 330 ,s2+s1 = 303,所以s1 > s2
我们因此可以自己定义字符串比较规则:
static bool compare(string &s1, string &s2)
{
return s1 + s2 < s2 + s1;
}
通过lambda表达式去写也可以。
代码如下:
class Solution {
public:
string minNumber(vector<int>& nums) {
vector<string> strs;
string result;
for( int i = 0; i < nums.size(); i++)
{
strs.push_back(to_string(nums[i]));
}
sort(strs.begin(), strs.end(), [](string &s1, string &s2) { return s1 + s2 < s2 + s1;} );
//sort(strs.begin(), strs.end(), compare);
for( int i = 0; i < strs.size(); i++ )
{
result += strs[i];
}
return result;
}
// static bool compare(string &s1, string &s2)
// {
// return s1 + s2 < s2 + s1;
// }
};
组成最大的数
https://www.nowcoder.com/questionTerminal/fc897457408f4bbe9d3f87588f497729