您的位置:首页 > 编程语言 > C语言/C++

把数组排成最小的数

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

IDEA

重载排序算法sort()用到的比较算法comp():先将正数数组转为string类型数组,然后对string类型数组中的元素按照相关规则排序,最后将排序好的string数组元素连接,生成一个字符串作为最终结果。

1.c++解法

2.java解法

CODE

1.

class Solution {
public:
static int comp(string str1,string str2){
string s1=str1+str2;
string s2=str2+str1;
return s1<s2;
}
string PrintMinNumber(vector<int> numbers) {
string res;
if(numbers.size()==0){
return res;
}
vector<string> str;
for(int i=0;i<numbers.size();i++){
stringstream ss;
ss<<numbers[i];
string s;
ss>>s;
str.push_back(s);
}
sort(str.begin(),str.end(),comp);

for(int i=0;i<str.size();i++){
res+=str[i];
}
return res;
}
};

2.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
private static final Comparator<Integer> comp=new Comparator<Integer>(){
public int compare(Integer str1,Integer str2){
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);
}
};
public String PrintMinNumber(int [] numbers) {
String res="";
ArrayList<Integer> list=new ArrayList<Integer>();
int len=numbers.length;
for(int i=0;i<len;i++){
list.add(numbers[i]);
}
Collections.sort(list,comp);
for(int j:list){
res+=j;
}
return res;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息