将给定非负整数列表中的数字排列成最大数字的2种方法。例如,给定[50,2,1,9],最大数字为95021。

一、题目简介

编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。

此处以如下数组为例:Integer[] num=new Integer[]{51,9,370,82,4,796};

二、实例代码

1、方法一:

/**
* 1.方法一:判断每个数的长度,通过在后面补0的方式使所有的数位数相等,
* 比较大小排序,得到最大数。
*/
public static void firstMeans(){
	Integer[] num=new Integer[]{51,9,370,82,4,796};
	String[] str=new String[num.length];
		
	int n=5;//设定待使用数组每个数字最大长度为5位;
		
	//长度小于5的数字循环在后面补0,直到长度为5;
	for(int k=0;k<num.length;k++){
		str[k]=num[k].toString();
		while(str[k].length()<n){				
			str[k]+="0";
		}
	}
	//打印补0后按大小排序结果;
	System.out.println(Arrays.toString(str));
		
	//以冒泡排序的思维对数补0后,长度相同的数组元素进行排序;
	//排序过程中需要同时交换两个数组中的相对位置;
	for(int i=0;i<num.length-1;i++){
		for(int j=i+1;j<num.length;j++){
			if(Integer.parseInt(str[i])<Integer.parseInt(str[j])){
				int temp1=num[i];
				String temp2=str[i];
				num[i]=num[j];
				str[i]=str[j];
				num[j]=temp1;
				str[j]=temp2;
			}
		}
	}
	//打印得到最大组合数的数组;
	System.out.println("方法1:"+Arrays.toString(num));
       String resulte="";
	for(int i=0;i<num.length;i++){
		resulte+=num[i];
	}
	System.out.println("最终结果_方法1:"+resulte);
}

2、方法二:

/**
* 2.方法一:两两互相组合比较大小,组合方式大的数放在前面(冒泡排序思维);
*/
public static void secondMeans(){
    Integer[] num2=new Integer[]{51,9,370,82,4,796};
    for(int i=0;i<num2.length-1;i++){
		for(int j=i+1;j<num2.length;j++){
			//数组中的数转化为字符串两两互相组合,组合结果转换为整型;
			int x=Integer.parseInt(num2[i].toString()+num2[j].toString());
			int y=Integer.parseInt(num2[j].toString()+num2[i].toString());
			//比较组合结果,组合在前的数组合结果大,就把该数交换到前面的位置;
			if(x<y){
				int temp=num2[i];
				num2[i]=num2[j];
				num2[j]=temp;
			}
		}
	}
	//打印得到最大组合数的数组;
	System.out.println("方法2:"+Arrays.toString(num2));
        String resulte="";
	for(int i=0;i<num2.length;i++){
		resulte+=num2[i];
	}
	System.out.println("最终结果_方法2:"+resulte);
}

三、打印结果

//3.调用方法输出结果;
public static void main(String[] args) {
	firstMeans();
	secondMeans();
}
[51000, 90000, 37000, 82000, 40000, 79600]
方法1:[9, 82, 796, 51, 4, 370]
最终结果_方法1:982796514370
方法2:[9, 82, 796, 51, 4, 370]
最终结果_方法2:982796514370

四、总结

方法一:给定数组元素有最大位数的限制,超过设定的位数最终结果将会出错,而且该方法循环使用次数过多,效率低下。

方法二:效率较高,也是网上多数大神使用的方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值