zoukankan      html  css  js  c++  java
  • 剑指offer-把数组排成最小的数

    题目:把数组排成最小的数

    题目描述:

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

    思路分析:总的来讲,这是一道排序的题,从最开始的两个结合后开始比较,然后调整顺序,一直排到末尾,最终便能得到最小的数字

     1 import java.util.ArrayList;
     2 import java.util.Collections;
     3 import java.util.Comparator;
     4 public class Solution {
     5     public String PrintMinNumber(int [] numbers) {
     6         int n;
     7         String s="";
     8         ArrayList<Integer>list=new ArrayList<Integer>();
     9         n=numbers.length;
    10         for(int i=0;i<n;i++){
    11             list.add(numbers[i]);
    12         }
    13         Collections.sort(list,new Comparator<Integer>(){
    14             public int compare(Integer str1,Integer str2){
    15                 String s1=str1+""+str2;
    16                 String s2=str2+""+str1;
    17                 return s1.compareTo(s2);
    18             }
    19         });
    20         for(int j:list){
    21             s+=j;         
    22         }
    23         return s;
    24     }
    25 }

    以上这个解法主要还是利用了比较器,通过比较器逐一调整顺序,当然也可以直接利用数组进行比较大小,有关比较器的知识可以看我的上一篇博客,有我自己的总结

    比较器

     1 public class Solution {
     2     public String PrintMinNumber(int [] numbers) {
     3         String str = "";
     4         for (int i=0; i<numbers.length; i++){
     5             for (int j=i+1; j<numbers.length; j++){
     6                 int a = Integer.valueOf(numbers[i]+""+numbers[j]);
     7                 int b = Integer.valueOf(numbers[j]+""+numbers[i]);
     8                 if (a > b){
     9                     int t = numbers[i];
    10                     numbers[i] = numbers[j];
    11                     numbers[j] = t;
    12                 }
    13                  
    14             }
    15         }
    16         for (int i = 0; i < numbers.length; i++) {
    17             str += String.valueOf(numbers[i]);
    18         }
    19         return str;
    20     }
    21 }
  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/pathjh/p/9434386.html
Copyright © 2011-2022 走看看