把数组排成最小的数
题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
0 < nums.length <= 100
- 输出结果可能非常大,所以你需要返回一个字符串而不是整数
- 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
思路
(1)自定义排序规则comp(),然后调用内置排序函数。
(2)将int转换成字符串,再执行字符串拼接操作,最后比较它们只用根据字符串大小的比较规则比较即可,因为ab和ba位数相等。
C++
class Solution {
public:
string minNumber(vector<int>& nums) {
vector<string> numstr;
string res;
for (auto num: nums)
numstr.push_back(to_string(num));
sort(numstr.begin(), numstr.end(), comp);
for(auto s: numstr)
res.append(s);
return res;
}
private:
static bool comp(string a, string b)
{
string ab = a+b;
string ba = b+a;
if(ab < ba)
return true;
return false;
}
};
python
class Solution:
def minNumber(self, nums: List[int]) -> int:
def comp(a:str, b:str) -> bool:
ab = a+b
ba = b+a
if ab<ba:
return -1
elif ab>ba:
return 1
else:
return 0
res = ""
numstr = []
for each in nums:
numstr.append(str(each))
numstr.sort(key=functools.cmp_to_key(comp))
for each in numstr:
res += each
return res