179.最大数(字符串解法,字符串知识点密集)

题目:

在这里插入图片描述

解题思路:

想法简单,实现较难
对数组每个首位进行比较,若首位相等就比较第二位,以此类推,对数组进行排序
但是首位相等比较第二位这个实现起来比较困难
这里巧妙的用到了字符串,a,b是两个字符串,对a+b和b+a进行大小比较,可以同样实现功能,这里当然不能直接比较a,b,因为a = "9" , b = "45"时,a是要排在b前面的,即此时a比b大

代码:

class Solution {
    public String largestNumber(int[] nums) {
        int len = nums.length;
        String[] nums_str = new String[len];
        for(int i = 0; i < len; i++){
            nums_str[i] = String.valueOf(nums[i]);//转int为String,方便按位比较
        }
        Arrays.sort(nums_str,new Comparator<String>(){//Arrays.sort()默认从小到大排序,默认x-y,返回正数表示参数x大于参数y,因为要从大到小排,所以要反着来
            @Override
            public int compare(String x, String y){
                if(x.charAt(0) != y.charAt(0)){//首位如果不等的话,直接比较谁的首位大
                    return y.charAt(0) - x.charAt(0);
                }
                String sum1 = x + y;
                String sum2 = y + x;
                return sum2.compareTo(sum1);//按字典顺序比较两个字符串,这里也要反着来
                /*
                如果此字符串等于此参数字符串,则返回值 0;
                如果此字符串小于参数字符串,则返回一个小于 0 的值;
                如果此字符串参数字符串,则返回一个大于 0 的值
                */
            }
        });
        StringBuffer ans = new StringBuffer();
        if(nums_str[0].charAt(0) == '0'){//字符串的比较不可以直接用 ==
            return "0";
        }
        for(String i : nums_str){
            ans.append(i);
        }
        return ans.toString();
    }
}

Tips:

①Arrays.sort()重写比较方法,Arrays.sort()默认从小到大排序,默认x-y,返回正数表示参数x大于参数y,因为本题要从大到小排,所以要反着来
②字符串的比较不可以直接用 ==
实际上字符串的比较有三种方法

a == b 比较的是字符串变量a,b地址是否相等
a.equals(b) 比较的是字符串a,b内容是否相等
a.compareTo(b) 按字典顺序比较两个字符串a,b
如果字符串a 等于字符串b,则返回值 0;
如果字符串a 小于字符串b,则返回一个小于 0 的值;
如果字符串a 大于字符串b,则返回一个大于 0 的值

③字符串String要用双引号"",字符char要用单引号''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值