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

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

    /**
      核心思想是,比较a和b,把他们拼起来,ab和ba哪个大,如果a大于b,那么交换。
      这样一遍循环,可以将最大的放到数组最后,多循环几次,就是我们想要的数组,输出即可。
    */
    public static String PrintMinNumber(int[] numbers) {
      for (int i = numbers.length; i > 0; i--) {
            for (int j = 0; j < i - 1; j++) {
                compareAndSwap(numbers, j, j + 1);
            }
        }
        return toString(numbers);
    }
    
    private static void compareAndSwap(int[] n, int i, int j) {
        Long ab = Long.valueOf(n[i] + "" + n[j]);
        Long ba = Long.valueOf(n[j] + "" + n[i]);
        if (ab > ba) {
            n[i] = n[i] ^ n[j];
            n[j] = n[i] ^ n[j];
            n[i] = n[i] ^ n[j];
        }
    }
    
    private static String toString(int[] numbers) {
        StringBuilder b = new StringBuilder();
        for (int number : numbers) {
            b.append(number);
        }
        return b.toString();
    }
    
    
  • 相关阅读:
    WEB环境安装步骤v1.2
    将m3u8格式转成mp4格式
    MySQL简介及安装v0.1
    使用脚本pull阿里云的k8s镜像并更改标签
    常用脚本
    常用命令
    记录一下环境变量IFS特定场景使用技巧
    hp-unix创建和更改LV
    HP-UNIX常用命令
    Linux集群搭建
  • 原文地址:https://www.cnblogs.com/paper-man/p/13284583.html
Copyright © 2011-2022 走看看