Leetcode 179 Largest number (最大的数字 和最小的数字)

一,问题描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值