剑指offer 33. 把数组排成最小的数

来源:互联网 发布:任务管理工具 知乎 编辑:程序博客网 时间:2024/06/14 09:11
//题目:输入一个数组,输出这个数组排列的最小数//将数组按照新的排序方式使用快排进行排序,之后直接顺序打印即可public class Main {public static void main(String[] args) throws Exception {System.out.println(getMaxSeq(new int[]{9}));}public static int getMaxSeq(int[] input){if(input == null || input.length == 0){return -1;}int low = 0;int high = input.length-1;sort(input,low,high);String result = "";for(int i = 0;i<input.length;i++){result = result+input[i];}return Integer.parseInt(result);}public static void sort(int[] input,int low, int high){//将数组按照新的排序方式使用快排进行排序,之后直接顺序打印即可if(low<high){int mid = partition(input,low,high);sort(input,low,mid-1);sort(input,mid+1,high);}}public static int partition(int[] input,int low, int high){int temp = input[low];while(low<high){while(low<high && isBigger(String.valueOf(input[high]),String.valueOf(temp))){high--;}input[low] = input[high];while(low<high && isBigger(String.valueOf(temp),String.valueOf(input[low]))){low++;}input[high] = input[low];}input[low] = temp;return low;}public static boolean isBigger(String num1, String num2){//一种新的排序方式String temp1 = num1+num2;String temp2 = num2+num1;for(int i = 0;i<temp1.length();i++){if(temp1.charAt(i)>temp2.charAt(i)){return true;}else if(temp1.charAt(i)<temp2.charAt(i)){return false;}}return true;}}

0 0
原创粉丝点击