编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
2016-11-09 11:00
711 查看
注意:最近有朋友指出了该做法并不正确,特此声明,当然,希望有大神可以来改正一下,本人能力有限,只能换一种方法去做。
错误做法:
public class Demo { //错误原因:跟Arrays.sort的排序方式有关s
/**
* 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
*/
public static void main(String[] args) {
int [] arr = {20, 321, 21 ,10,8}; //要求输出1020213218
StringBuffer sbBuffer = new StringBuffer();
for (int i = 0; i < arr.length; i++) { //利用StringBuffer将数组拼接成字符串
if(i == (arr.length -1 )){
sbBuffer.append(arr[i]); //最后一个不加空格
}else{
sbBuffer.append(arr[i] + " "); //拼接时加上空格,以便正则split的使用
}
}
System.out.println(sbBuffer); //输出拼接的结果
//熟悉正则match()、split()
String[] strs = sbBuffer.toString().split(" "); //利用正则split根据空格,将字符串转成字符串数组
Arrays.sort(strs); //利用Arrays.sort()进行数组的排序
StringBuffer sbBuffer2 = new StringBuffer();
for (int i = 0; i < strs.length; i++) { //排序之后再拼接成字符串,即可得到结果
sbBuffer2.append(strs[i]);
}
System.out.println(sbBuffer2);
}
}
正确做法:
错误做法:
public class Demo { //错误原因:跟Arrays.sort的排序方式有关s
/**
* 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
*/
public static void main(String[] args) {
int [] arr = {20, 321, 21 ,10,8}; //要求输出1020213218
StringBuffer sbBuffer = new StringBuffer();
for (int i = 0; i < arr.length; i++) { //利用StringBuffer将数组拼接成字符串
if(i == (arr.length -1 )){
sbBuffer.append(arr[i]); //最后一个不加空格
}else{
sbBuffer.append(arr[i] + " "); //拼接时加上空格,以便正则split的使用
}
}
System.out.println(sbBuffer); //输出拼接的结果
//熟悉正则match()、split()
String[] strs = sbBuffer.toString().split(" "); //利用正则split根据空格,将字符串转成字符串数组
Arrays.sort(strs); //利用Arrays.sort()进行数组的排序
StringBuffer sbBuffer2 = new StringBuffer();
for (int i = 0; i < strs.length; i++) { //排序之后再拼接成字符串,即可得到结果
sbBuffer2.append(strs[i]);
}
System.out.println(sbBuffer2);
}
}
正确做法:
/** * 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个 * 思路:对于两个字符串重新定义其大小规则,比如:给定两个字符串s1,s2,如果(s1+s2)>(s2+s1) 那么s1>s2,反之s2>s1 */ public class Demo1{ public long newSort(long []arr) { //用长整型以免数据易于溢出 long result; List<String> list=new ArrayList<String>(); //转为字符串数组,利用Comparator比较 for (long i:arr) { //第一种for循环输出方法;注意这里遍历输出的是对象 list.add(String.valueOf(i)); } /* for (int i = 0; i < arr.length; i++) { //第二种传统的遍历输出方法;两者等同 long a=arr[i]; list.add(String.valueOf(a)); }*/ //自定义比较并排序 Collections.sort(list, new Comparator<String>(){ public int compare(String o1, String o2) { String m=o1+o2; String n=o2+o1; return m.compareTo(n); } }); //最后将排好序的字符串进行拼接得出结果 StringBuffer sBuffer=new StringBuffer(); for (String str : list) { sBuffer.append(str); } result=Long.parseLong(sBuffer.toString()); return result; } public static void main(String[] args) { long []a={3,32,321}; long []b={152,203,32,54,56,8}; Demo1 demo=new Demo1(); long c=demo.newSort(b); long d=demo.newSort(a); System.out.println(c+"\r"+d); } }
相关文章推荐
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- Comparator 实现集合中元素的比较.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这321323
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。剑指Offer(32)
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 对整数数组里所有的数字拼接起来,输出最小的一个
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。