• 剑指Offer-- 第45题 把数组排成最小数


    第45亿 把数组排成最小数

    题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
    剑指Offer思路

    1. 最直接的解法应该是求出所有数字的全排列,然后把每个排列拼接起来,在进行比较,显然这种复杂度高;
    2. 找到一种新的排序规则确定两个数的顺序,假设两个数字m和n如果mn<nm,那么应该打印mn,也就是说m应该排在n的前面;反之,如果nm<mn,那么应该打印nm,此时n应该排在m前面;如果mn = nm,则m等于n。同时需要考虑两个数拼接后超过范围的问题,所需需要考虑使用字符串,这里需要重新定义字符串大小的比较。
      自己写的low代码
    public class Solution {
       public  String PrintMinNumber(int [] numbers) {
    		  String result = "";
    		  if(numbers==null||numbers.length==0) {
    			  return result;
    		  }
    		  
    		  //转为字符串数组;
    		  String[] mNumbers=new String[numbers.length];
    		  for(int i=0;i<numbers.length;i++) {
    			  mNumbers[i]=String.valueOf(numbers[i]);
    		  }
    		  //冒泡排序;
    		  for(int i=0;i<mNumbers.length;i++) {
    			  for(int j=mNumbers.length-1;j>i;j--) {
    				  if(compareStr(mNumbers[j],mNumbers[j-1])<0){
    					  String temp = mNumbers[j-1];
    					  mNumbers[j-1]=mNumbers[j];
    					  mNumbers[j]=temp;
    				  }
    			  }
    		  }
    		 for(String obj:mNumbers) {
    			 result +=obj;
    		 }
    		 return result;
    	    }
    	  /**
    	   * a大于b返回1,a小于b返回-1,a等于b返回0
    	   * @param a
    	   * @param b
    	   * @return
    	   */
    	  public  int compareStr(String a,String b) {
    		return a.concat(b).compareTo(b.concat(a));
    	  }
    
    **比较好的写法**
    链接:https://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993
    来源:牛客网
    
    飞dsadsadasd
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Solution {
        public String PrintMinNumber(int [] numbers) {
            int n;
      String s="";
      ArrayList<Integer> list= new ArrayList<Integer>();
      n=numbers.length;
      for(int i=0;i<n;i++){
       list.add(numbers[i]);
       
      }
      Collections.sort(list, new Comparator<Integer>(){
      
      public int compare(Integer str1,Integer str2){
       String s1=str1+""+str2;
       String s2=str2+""+str1;
             return s1.compareTo(s2);
         }
      });
      
      for(int j:list){
       s+=j;
      }
            return s;
    
        }
    }
    
    多思考,多尝试。
  • 相关阅读:
    深入理解关系型数据库的数据水平切分和垂直切分
    数据库Sharding的基本思想和切分策略
    Mycat 设置全局序列号
    Spring MVC异常统一处理
    spring配置文件中bean标签
    浅析VO、DTO、DO、PO的概念、区别和用处
    CentOS7.0安装Nginx 1.7.4
    大数据的四大特点
    CentOS 7 上安装 redis3.2.3安装与配置
    CentOS7下安装MySQL5.7安装与配置(YUM)
  • 原文地址:https://www.cnblogs.com/LynnMin/p/9345973.html
Copyright © 2020-2023  润新知