题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。
样例:
输入:[3, 32, 321]
输出:321323
注意:输出数字的格式为字符串。
分析:
对数组重新进行排序,依据以下规则:
- 若ab > ba 则 a > b,将a和b的位置交换
- 若ab < ba 则 a < b,a、b位置不变
- 若ab = ba 则 a = b,a、b位置不变
//首位最小的靠前放
//当前这一位和第二小的第一位比较
public String printMinNumber(int[] nums) {
if(nums==null||nums.length==0)
return"";
StringBuilder s=new StringBuilder();
for(int i=0;i<nums.length;i++) {
for(int j=i+1;j<nums.length;j++) {
int a=Integer.valueOf(nums[i]+""+nums[j]);
int b=Integer.valueOf(nums[j]+""+nums[i]);
if(a>b) {
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
for(int i=0;i<nums.length;i++)
s.append(nums[i]);
return s.toString();
}

博客围绕输入正整数数组,将数组中数字拼接成最小数展开。给出样例,如输入[3, 32, 321],输出最小数字321323。并分析解决方法,需对数组重新排序,依据ab和ba的大小关系决定a、b位置是否交换。
1836

被折叠的 条评论
为什么被折叠?



