200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 剑指offer_33:输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接

剑指offer_33:输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接

时间:2020-11-16 17:30:35

相关推荐

剑指offer_33:输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接

题目描述

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

思路:这个题实际是考的字符串比大小,字符串是如何比大小?

1 .如果字符串相等返回值为0,不等返回其他数值。

比较方法是先比较对应字符的大小(Ascall吗顺序),从第一个字母开始比较。

2.如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)

(负值前字符串的值小于后字符串,正值前字符串大于后字符串)

3.如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,

以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.

我们这里用到的是 第1个:334和3331谁大? 从第一位一直到第三位比较“4>3”故,“334”>“3331”,

程序验证如下:

public class test_2 {public static void main(String[] args) {// TODO Auto-generated method stubString str_1="334";String str_2="3331";//如果相等则返回0,System.out.println(pareTo(str_2));}}

结果:

我们可以看到,334比3331大1.那么我们就可以做下面这道题了,其实就是比较两个字符串的连接大小

list.sort((a,b)->(a+""+b).compareTo(b+""+a));

上面这句话的意思是,重写list的sort方法:比如 3 32 321 就是做这样一个事,

32132<32321,所以将 321 放在 32 的前面 ,------ 3 321 32

3213<3321 ,所以将 321 放在 3 的前面,------ 321 32 3

以此类推:

package offer_java;import java.util.ArrayList;import java.util.List;/*输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。*/public class PrintMinNumber {static String PrintMinNumber(int [] numbers) {if (numbers.length==0|| numbers ==null) {return "";}List<Integer> list=new ArrayList<>();for(int a:numbers) {list.add(a);}list.sort((a,b)->(a+""+b).compareTo(b+""+a));StringBuffer stringBuffer=new StringBuffer();for(int a:list) {stringBuffer.append(a);}return stringBuffer.toString();}public static void main(String[] args) {// TODO Auto-generated method stubint [] numbers= {3,32,321};System.out.println(PrintMinNumber(numbers));}}

下面是list.sort的源码:

//从小到大的排序list.Sort(delegate(int a, int b){return pareTo(b);});//从大到小的排序list.Sort((a, b) =>pareTo(a)); //lamda expression

这种方式适合于字符串等许多类型的排序!

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。