zoukankan      html  css  js  c++  java
  • N32_把数组排成最小的数

    package new_offer;
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    /**
    此题借鉴别人的思路。https://www.nowcoder.com/profile/773456/tests
     * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
     * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
     * @author Sonya
     *先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
     *排序规则如下:
     * 若ab > ba 则 a > b,
     * 若ab < ba 则 a < b,
     * 若ab = ba 则 a = b;
     * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较
     */
    
    public class N32_PrintMinNumber {
    	
    	public String PrintMinNumber(int [] numbers) {
    	if(numbers.length==0)return "";
    	int n=numbers.length;
    	String[]str=new String[n];
    	for(int i=0;i<n;i++) {//将numbers中的每一个放入str字符数组中
    		str[i]=String.valueOf(numbers[i]).toString();
    	}
    	Arrays.sort(str, new Comparator<String>() {   //重写compare 方法。
    		@Override
    		 public int compare(String str1,String str2) {
    			String c1=str1+str2;
    			String c2=str2+str1;
    			return c1.compareTo(c2);
    			
    		} 
    	});
    	StringBuilder sb=new StringBuilder();
    	for(int i=0;i<n;i++) {
    		sb.append(str[i]);
    	}
    		return sb.toString();
    
        }
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		N32_PrintMinNumber n32=new N32_PrintMinNumber();
    		int []array= {3,32,321};
    		String str=n32.PrintMinNumber(array);
    		System.out.println(str);
    	}
    
    }
    

      

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/kexiblog/p/11149944.html
Copyright © 2011-2022 走看看