把数组排成最小的数

    xiaoxiao2022-07-01  105

    题目描述

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

    思路

    因为前几天刷过这道题:字符串的顺序排列,想到其实这题做法也是排列组合出各种可能的数字,然后比较大小,取其最小的即可。

    public class Solution { //输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 // 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 private Long MinNum = Long.MAX_VALUE; public String PrintMinNumber(int [] numbers) { if(numbers.length == 0){ return ""; } getMinNum(numbers , 0); return String.valueOf(MinNum); } private void getMinNum(int[] numbers , int ops){ if(ops == numbers.length){ StringBuffer sb = new StringBuffer(); for(int i : numbers){ sb.append(String.valueOf(i)); } if(MinNum > Long.parseLong(sb.toString())){ MinNum = Long.parseLong(sb.toString()); } } for(int i =ops ; i< numbers.length ;i++){ int temp = numbers[i]; numbers[i] = numbers[ops]; numbers[ops] = temp; getMinNum(numbers , ops+1); temp = numbers[i]; numbers[i] = numbers[ops]; numbers[ops] = temp; } } }
    最新回复(0)