33 把数组排成最小数
2016-07-18 22:15
288 查看
描述:
实现代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public static void main(String[] args) {
int arr[]={3,32,321};
int arr1[]={3,32,321};
System.out.println("方法一");
String res=PrintMinNumber(arr);
System.out.println(res);
// 方法二
String res2=PrintMinNumber2(arr1);
System.out.println("方法二");
System.out.println(res);
}
public static String PrintMinNumber2(int [] numbers) {
int n;
String s="";
ArrayList<Integer> list=new ArrayList<Integer>();
n=numbers.length;
for(int i=0;i<n;i++){
list.add(numbers[i]);//将数组放入arrayList中
}
//实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer str1, Integer str2) {
// TODO Auto-generated method stub
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);
}
});
for(int j:list){
s+=j;
}
return s;
}
public static String PrintMinNumber(int [] numbers) {
String res="";
ArrayList<String> minNumber=new ArrayList<String>();
for (int i : numbers) {
minNumber.add(String.valueOf(i));
}
Collections.sort(minNumber, new Comparator<String>() {
@Override
public int compare(String a, String b) {
int len1 = a.length();
int len2 = b.length();
int lim = Math.min(len1, len2);
char v1[] = a.toCharArray();
char v2[] = b.toCharArray();
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
if (len1>lim) {
return compare(a.substring(lim), b);
}else if (len2>lim) {
return compare(a,b.substring(lim));
}else {
return len1 - len2;
}
}
});
//System.out.println(minNumber);
StringBuilder sb=new StringBuilder();
for (String i : minNumber) {
sb.append(i);
}
return sb.toString();
}
}
测试结果:
实现代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public static void main(String[] args) {
int arr[]={3,32,321};
int arr1[]={3,32,321};
System.out.println("方法一");
String res=PrintMinNumber(arr);
System.out.println(res);
// 方法二
String res2=PrintMinNumber2(arr1);
System.out.println("方法二");
System.out.println(res);
}
public static String PrintMinNumber2(int [] numbers) {
int n;
String s="";
ArrayList<Integer> list=new ArrayList<Integer>();
n=numbers.length;
for(int i=0;i<n;i++){
list.add(numbers[i]);//将数组放入arrayList中
}
//实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer str1, Integer str2) {
// TODO Auto-generated method stub
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);
}
});
for(int j:list){
s+=j;
}
return s;
}
public static String PrintMinNumber(int [] numbers) {
String res="";
ArrayList<String> minNumber=new ArrayList<String>();
for (int i : numbers) {
minNumber.add(String.valueOf(i));
}
Collections.sort(minNumber, new Comparator<String>() {
@Override
public int compare(String a, String b) {
int len1 = a.length();
int len2 = b.length();
int lim = Math.min(len1, len2);
char v1[] = a.toCharArray();
char v2[] = b.toCharArray();
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
if (len1>lim) {
return compare(a.substring(lim), b);
}else if (len2>lim) {
return compare(a,b.substring(lim));
}else {
return len1 - len2;
}
}
});
//System.out.println(minNumber);
StringBuilder sb=new StringBuilder();
for (String i : minNumber) {
sb.append(i);
}
return sb.toString();
}
}
测试结果:
相关文章推荐
- python核心编程学习笔记-2016-07-1 4000 8-01-print
- POJ 1961 (KMP)
- 佛家辞典、基本概念
- 通俗易懂的理解卷积
- 校验身份证号码的有效性【JS】
- 【功能-java-函数】生成随机数的函数(返回字节)
- javamail异常发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/ut
- UVa725-Division
- java+mysql实现保存图片到数据库,以及读取数据库存储的图片
- Linux第五周
- 洛谷P1160 队列安排
- Redis简介,安装和配置,停止,卸载(图解方式)
- poj1458最长公共子序列问题
- Android开发——利用productFlavors实现一套代码打包多版本
- 我理解的语法糖
- (转)大型网站的系统架构
- 一个实用的Eclipse快捷键
- HDU 4798 - Skycity
- JAVAWEB其他知识
- MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST