33 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
C++:
1 class Solution { 2 public: 3 static bool cmp(string s1 , string s2){ 4 return s1+s2 < s2+s1 ; 5 } 6 7 string PrintMinNumber(vector<int> numbers) { 8 vector<string> nums ; 9 for(int num : numbers){ 10 nums.push_back(to_string(num)) ; 11 } 12 sort(nums.begin() , nums.end() , cmp) ; 13 string res = "" ; 14 for(string str : nums){ 15 res += str ; 16 } 17 return res ; 18 } 19 };
java:
1 import java.util.Comparator; 2 import java.util.Arrays; 3 4 public class Solution { 5 public String PrintMinNumber(int [] numbers) { 6 int n = numbers.length ; 7 String[] nums = new String[n] ; 8 for(int i = 0 ; i < n ; i++){ 9 nums[i] = numbers[i] + "" ; 10 } 11 Arrays.sort(nums , (s1,s2) -> (s1+s2).compareTo(s2+s1)) ; 12 String res = "" ; 13 for(String str : nums){ 14 res += str ; 15 } 16 return res ; 17 } 18 }