【Leetcode】179.最大数

题目:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

输入:nums = [10,2]
输出:"210"

示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"


思路:对于两个数而言,只需要比较哪个放前面结果比较大,如果ab>ba,则a放在b前。

当一个数组中有n个数时,不需要得到n个数的全排列。上述排序规则满足传递性,两个元素比较就可以确定它们在排序以后的相对位置关系

    class Solution {
        public String largestNumber(int[] nums) {
            int n = nums.length;//数组中数字个数
​
            //数字数组转化成字符数组
            String[] strArr = new String[n];
            for(int i = 0; i < n; i++){
                strArr[i] = String.valueOf(nums[i]);
            }
​
            //Lambda表达式:重写排序规则(4ms)
            Arrays.sort(strArr, (o1,o2) -> (o2+o1).compareTo(o1+o2));
​
            //字符数组转化成字符串
            StringBuilder sb = new StringBuilder();
            for(String num : strArr){
                sb.append(num);
            }
            String result = sb.toString();
​
            //特殊情况,存在若干个0
            if(result.charAt(0) == '0'){
                result = "0";   //单引号是字符,双引号是字符串
            }
            return result;
        }
    }

一些知识点

  1. Lambda表达式

    1. lambda expression是一个匿名函数(没有函数名的函数),可以表示闭包。

    2. Java 8的一个大亮点是引入Lambda表达式,允许把函数作为一个方法的参数(函数作为参数传递进方法中)。lambda表达式会被编译成一个函数式接口(一个接口有且仅有一个抽象方法,这个接口叫函数式接口)

    3. 可用lambda表达式代替匿名的内部类,代码更简洁,还可读。

      1. 举例1:

      //不用lambda的老方法 Runnable runnable1=new Runnable(){ @Override public void run(){ System.out.println("Running without Lambda"); } };

      //用lambda: Runnable runnable2=()->system.out.println("Running from Lambda");

      1. 举例2:

        o1,o2直接出线是因为数据类型可以省略,因为可以有编译器推断得出,称为”类型推断“

        Comparator<Integer> com2=(o1,o2) -> Integer.compare(o1, o2);*//lambda表达式写法*

    4. 一些Lambda表达式的简单例子:

  1. Arrays.sort().compare();

    string中的compareTo方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值