class Solution {
public:
string minNumber(vector<int>& nums) {
}
};
剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入:[10,2]
输出: "102"
示例 2:
输入:[3,30,34,5,9]
输出: "3033459"
提示:
0 < nums.length <= 100
说明:
原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 3 MB, 提交时间: 2022-11-13 13:57:45
func minNumber(nums []int) string { sort.Slice(nums, func(i, j int)bool{ x := fmt.Sprintf("%d%d", nums[i], nums[j]) y := fmt.Sprintf("%d%d", nums[j], nums[i]) return x < y }) var ans string for _, n := range nums{ ans += fmt.Sprintf("%d", n) } return ans }
python3 解法, 执行用时: 36 ms, 内存消耗: 15.3 MB, 提交时间: 2022-11-13 13:56:48
class Solution: def minNumber(self, nums: List[int]) -> str: def quick_sort(l , r): if l >= r: return i, j = l, r while i < j: while strs[j] + strs[l] >= strs[l] + strs[j] and i < j: j -= 1 while strs[i] + strs[l] <= strs[l] + strs[i] and i < j: i += 1 strs[i], strs[j] = strs[j], strs[i] strs[i], strs[l] = strs[l], strs[i] quick_sort(l, i - 1) quick_sort(i + 1, r) strs = [str(num) for num in nums] quick_sort(0, len(strs) - 1) return ''.join(strs)
python3 解法, 执行用时: 40 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-13 13:56:15
class Solution: def minNumber(self, nums: List[int]) -> str: def sort_rule(x, y): a, b = x + y, y + x if a > b: return 1 elif a < b: return -1 else: return 0 strs = [str(num) for num in nums] strs.sort(key = functools.cmp_to_key(sort_rule)) return ''.join(strs)