题目
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2] 输出: "102" 示例 2:
输入: [3,30,34,5,9] 输出: "3033459"
思路
每两个数逐个比较,如果两个数共有的高位能比较出大小,则比较成功,如23和221比较。否则得试着将两个数字拼接为相等长度。
比较的方法:举例,320和32比较,应该解析为32032和32323比较(即不断循环原数字,直到两个数字长度之和)
更简单的思路: 比较32032和32320(即直接比较两种可能的组合)
代码
class Solution {
public String minNumber(int[] nums) {
String[] s = new String[nums.length];
for(int i=0;i<s.length;i++){
s[i] = nums[i]+"";
}
for(int i=0;i<s.length;i++){
for(int j=i+1;j<s.length;j++){
if(bigger(s[i],s[j])){
String tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
}
StringBuffer sb = new StringBuffer();
for(String str : s){
sb.append(str);
}
return sb.toString();
}
public boolean bigger(String s1,String s2){
char c1='0',c2='0';
for(int i=0;i<s1.length()+s2.length();i++){
c1 = s1.charAt(i%s1.length());
c2 = s2.charAt(i%s2.length());
if(c1==c2) continue;
if(c1>c2){
return true;
}else{
return false;
}
}
return false;
}
}