剑指offeer:把数组排成最小的数
http://www.cnblogs.com/tobemaster/p/5911352.html
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
自己定义规则:s1+s2>=s2+s1 则规定 字符串s1>s2
按以上规则,对数组中的数进行冒泡排序,
然后按顺序拼接字符串并返回
public static String PrintMinNumber(int [] numbers) { //冒泡排序,大数往后靠 for(int i=numbers.length-1;i>0;i--){ for(int j=0;j<i;j++){ if(bigger(numbers[j]+"", numbers[j+1]+"")){ int temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1]=temp; } } } StringBuilder sb = new StringBuilder(); for(int n:numbers){ sb.append(n); } return sb.toString(); } //比较两个字符串合并后的大小, s1+s2>s2+s1 返回true,说明s1更大 public static boolean bigger(String s1,String s2){ char[] c1 = (s1+s2).toCharArray(); char[] c2 = (s2+s1).toCharArray(); int p1=0; int p2=0; while(p1<c1.length&&p2<c2.length){ if(c1[p1]==c2[p2]){ p1++; p2++; }else if(c1[p1]>c2[p2]){ return true; }else{ return false; } } return true; }
posted on 2017-08-27 22:13 zhangxiaoyu 阅读(129) 评论(0) 收藏 举报
浙公网安备 33010602011771号