一,问题描述
1,给出一组非负整数,求这些非负整数可以拼接出的最大数字
2,例如,给出数组[3,30,34,5,9] ,拼接出的最大数字为9534330.
3,由于本题输入时一个整型数组,输出是一个字符串。因此,在输出前,可以考虑到数组进行一下排序。
4,解题思路(求最大的数字的解题思路,求最小的数字的解题思路和求最大的数字的解题思路类似的):
先把数组转化成字符串数组,然后两两拼接进行比较大小,大的在前面,小的在后面。
二,求数组可以拼接出最大的数 程序如下:
import java.util.*; //leetcode 179
public class Test2{
public String largestNumber(int []nums){
String []strs=new String[nums.length]; //把数组转化成字符串
for(int i=0;i<nums.length;i++){
strs[i]=String.valueOf(nums[i]);// 把数组转化成字符串
}
String temp;
for(int i=0;i<strs.length;i++)
{
for(int j=i+1;j<strs.length;j++)
{
if((strs[i]+strs[j]).compareTo(strs[j]+strs[i])<0){
temp=strs[i];
strs[i]=strs[j];
strs[j]=temp;
}
}
}
if(strs[0].equals("0"))
{
return "0";
}
else
{
String str="";
for(int i=0;i<strs.length;i++)
{
str=str+strs[i];
}
return str;
}
}
public static void main(String []args){
Test2 test=new Test2();
int nums[]={3,30,34,5,9};
String str=test.largestNumber(nums);
System.out.println("str="+str);
}
}
运行结果:
str=9534330
三,求数组可以拼接出最小的数 程序如下:
import java.util.*; //leetcode 179
public class Test2{
public String largestNumber(int []nums){
String []strs=new String[nums.length]; //把数组转化成字符串
for(int i=0;i<nums.length;i++){
strs[i]=String.valueOf(nums[i]);// 把数组转化成字符串
}
String temp;
for(int i=0;i<strs.length;i++)
{
for(int j=i+1;j<strs.length;j++)
{
if((strs[i]+strs[j]).compareTo(strs[j]+strs[i])<0){
temp=strs[i];
strs[i]=strs[j];
strs[j]=temp;
}
}
}
if(strs[0].equals("0"))
{
return "0";
}
else
{
String str="";
for(int i=0;i<strs.length;i++)
{
str=str+strs[i];
}
return str;
}
}
public static void main(String []args){
Test2 test=new Test2();
int nums[]={3,30,34,5,9};
String str=test.largestNumber(nums);
System.out.println("str="+str);
}
}
运行结果:
str=3033459