把数组排成最小的数
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;
}
}
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;
}
}
相关文章推荐
- 第三题 数组中最小的K个数
- 旋转数组的最小数字(C++ 和 Python 实现)
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 把数组排成最小的数
- 数组中两个元素最小的距离
- [牛客网,剑指offer,python] 旋转数组的最小数字
- 剑指offer-旋转数组的最小数字
- 数组中的数分为两组,使得两个组的和的差的绝对值最小
- 5.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1
- ios 数组最大值,最小值,平均值,和的快速算法
- 数组与矩阵---在数组中找到一个局部最小的位置
- 编程之美_2.10_寻找数组中的最大值和最小值
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 算法学习记录七(C++)--->二分法找有序旋转数组最小值
- 寻找有序数组的反转数组中最小的元素
- 剑指offer(五,六),用两个栈实现队列,旋转数组的最小数字
- 在旋转数组中寻找最小值
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转。输出旋转数组的最小值。
- python_lintcode_177. 把排序数组转换为高度最小的二叉搜索树_156. 合并区间
- 以容器的方法找数组中的k个最小的数