1. 题⽬链接:179.最⼤数
2. 题⽬描述
3. 解法(贪⼼):
可以先优化:
将所有的数字当成字符串处理,那么两个数字之间的拼接操作以及⽐较操作就会很⽅便。
贪⼼策略:
按照题⽬的要求,重新定义⼀个新的排序规则,然后排序即可。
排序规则:
a. 「A拼接B」⼤于「B拼接A」,那么A在前,B在后;
b. 「A拼接B」等于「B拼接A」,那么AB的顺序⽆所谓;
c. 「A拼接B」⼩于「B拼接A」,那么B在前,A在后;
C++算法代码:
class Solution
{
public:
string largestNumber(vector<int>& nums)
{
//将所有数转为字符串
vector<string>t;
for(auto& key:nums)
{
t.push_back(to_string(key));
}
//排序
sort(t.begin(),t.end(),[](const string& a,const string& b)
{
return a+b>b+a;
});
//连接
string answer;
for(auto& key:t)
{
answer+=key;
}
//判断输出
//当字符串为一长串0时,需要化简为一个0
if(answer[0]=='0')
{
return "0";
}
else
{
return answer;
}
}
};
Java算法代码:
class Solution
{
public String largestNumber(int[] nums)
{
// 优化:把所有的数转化成字符串
int n = nums.length;
String[] strs = new String[n];
for (int i = 0; i < n; i++) strs[i] = "" + nums[i];
// 排序
Arrays.sort(strs, (a, b) ->
{
return (b + a).compareTo(a + b);
});
// 提取结果
StringBuffer ret = new StringBuffer();
for (String s : strs) ret.append(s);
if (ret.charAt(0) == '0') return "0";
return ret.toString();
}
}