题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例1
输入: [10,2]
输出: "102"
示例2
输入: [3,30,34,5,9]
输出: "3033459"
解题思路
- 用上面示例 2 进行举例。将两个相邻的数字加起来,再互换一下位置继续比较。如 "3" 和 "30" 组成 330,"30" 和 "3" 组成 303,发现 303 < 330,所以把数组中 3 与 30 的位置互换一下。
- 进行冒泡排序,最终排列出一个最小的数值。
Java代码实现
class Solution { public String minNumber(int[] nums) { for (int i = 0; i < nums.length - 1; ++i) { for (int j = 0; j < nums.length - i - 1; ++j) { String temp1 = String.valueOf(nums[j]); String temp2 = String.valueOf(nums[j + 1]); long nums1 = Long.parseLong(temp1 + temp2); // 3 30 long nums2 = Long.parseLong(temp2 + temp1); // 30 3 if (nums1 > nums2) { int temp = nums[j + 1]; nums[j + 1] = nums[j]; nums[j] = temp; } } } // 拼接 StringBuilder sb = new StringBuilder(); for (int i = 0; i < nums.length; ++i) { sb.append(nums[i]); } return sb.toString(); } }