剑指_45把数组排成最小的数

package Jianzhi;

import java.util.Arrays;
import java.util.Comparator;
/*
 * 先将整型数组换成String数组排序,
 * java使用自定义的排序方法需要实现java.util.Comparator接口中的compare方法
 * 最后将排好序的字符串拼接出来,比较拼接之后的字符串。
 * 若ab > ba 则 a > b,
 * 若ab < ba 则 a < b,
 * 若ab = ba 则 a = b;
 */

public class jianzhi_45 {
	public String PrintMinNumber(int[] numbers) {
		if(numbers==null||numbers.length==0) return "";
		int len=numbers.length;
		String[] str=new String[len];//转化为字符串数组,之后定义字符串的比较方法
		StringBuilder res=new StringBuilder();
		for(int i=0;i<len;i++) {
			str[i]=String.valueOf(numbers[i]);//String.valueOf()//将其他类型转化为字符串类型
		}
		Arrays.sort(str,new Comparator<String>() {//Arrays.sort(),Comparator()用于用户自定义自己的比较函数
			public int compare(String s1,String s2) {
				String c1=s1+s2;
				String c2=s2+s1;
				return c1.compareTo(c2);
			}
		});
		for(int i=0;i<len;i++) {
			res.append(str[i]);
		}
		return res.toString();
	}
}
/*
 * 采用选择排序的方法,每次按照自定义的排序方法,
 * 选择最小的值添加到StringBuilder中.
 * String中的默认compareTo()方法是按照字典序(ASCII)的顺序进行排序,完全通过字母的顺序进行排序
 */
class Solution{
	public String PrintMinNumber(int[] numbers) {
		if(numbers==null||numbers.length<0) return "";
		StringBuilder res=new StringBuilder();
		String pre,last;
		int tmp;
		for(int i=0;i<numbers.length;i++) {
			for(int j=i;j<numbers.length;j++) {
				pre=numbers[i]+""+numbers[j];//字符串拼接
				last=numbers[j]+""+numbers[i];
				if(pre.compareTo(last)>0) {//如果拼接之后的pre大于last,那么交换他们的次序,每次外循环都能将最小的数移到最外面
					tmp=numbers[i];
					numbers[i]=numbers[j];
					numbers[j]=tmp;
				}
			}
			res.append(numbers[i]);
		}
		return res.toString();
	}
}


Comparator 是一个接口,所以sort方法中可以传入任意实现了此接口的类的实例,这就是策略模式的主要思想.

参考:http://blog.csdn.net/wisgood/article/details/16541013(深入理解Arrays.sort())

http://blog.csdn.net/winddreams/article/details/51577500(Arrays.sort()总结)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值