算法题型的个人练习_03

算法实现:

输入一个正整数数组,然后输出该数组中所有数字组成的最大数。

例如,[7,5,9,556,89,11]最大数为9897556511


算法思想:

对数组按照自定义规则进行排序,在java中,我们可以使用Arrays.sort()方法,并且通过接口Comparator重新编写排序的规则。


排序规则:

数字位数相同比较两个数的第一位,谁大谁在前,要是第一位相同就比较第二位,依次类推。

数字位数不同就先补位,使两个数字位数相同。然后比较。如:7和778比较,使7补位为777,再比较。


代码:

public class Algorithm3 {

	public String test(int num[]){
		
		String[] str = new String[num.length];
		int i = 0;
		for(int n : num){
			str[i++] = n + ""; 
		}
		Arrays.sort(str,new Comparator<String>(){

			
			@Override
			public int compare(String o1, String o2) {
				// TODO 自动生成的方法存根
				int length1 = o1.toCharArray().length;//数字的位数
				int length2 = o2.toCharArray().length;				
				StringBuilder s1 = new StringBuilder();//补位的数字
				StringBuilder s2 = new StringBuilder();
				
				//补位方法
				for(int i=0;i<length2;i++){
					s1.append(o1);
				}
				for(int i=0;i<length1;i++){
					s2.append(o2);
				}
				return s2.toString().compareTo(s1.toString());
			}
		});
		
		StringBuilder s = new StringBuilder();
		for(String s3 : str){
			s.append(s3);
		}
		return s.toString();
	}
	
	public static void main(String[] args){
		int number[] = {7,5,9,556,89,11};
		System.out.println("排序数组为:");
		for(int n : number){
			System.out.print(n + " ");
		}
		System.out.println("");
		Algorithm3 t = new Algorithm3();
		System.out.println("最大数为:" + t.test(number));
	}
}

结果:

排序数组为:
7 5 9 556 89 11 
最大数为:9897556511


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值