LeetCode 179. 最大数

news2024/11/27 0:27:43

🌈🌈😄😄

欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 179. 最大数,做好准备了么,那么开始吧。

🌲🌲🐴🐴

一、题目名称

LeetCode 179. 最大数

二、题目要求

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

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

三、相应举例

示例 1:

输入nums = [10,2]

输出:"210"

示例 2:

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

四、限制要求

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 109

五、解决办法

排序

要想组成最大的整数,一种直观的想法是把数值大的数放在高位。于是我们可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。

六、代码实现

解法一:

class Solution {
    public String largestNumber(int[] nums) {
        int n = nums.length;
        // 转换成包装类型,以便传入 Comparator 对象(此处为 lambda 表达式)
        Integer[] numsArr = new Integer[n];
        for (int i = 0; i < n; i++) {
            numsArr[i] = nums[i];
        }

        Arrays.sort(numsArr, (x, y) -> {
            long sx = 10, sy = 10;
            while (sx <= x) {
                sx *= 10;
            }
            while (sy <= y) {
                sy *= 10;
            }
            return (int) (-sy * x - y + sx * y + x);
        });

        if (numsArr[0] == 0) {
            return "0";
        }
        StringBuilder ret = new StringBuilder();
        for (int num : numsArr) {
            ret.append(num);
        }
        return ret.toString();
    }
}

此解先将数组转换成包装类型,以便于传入 Comparator 对象,其次 使用Comparator比较器完成指定排序,再将其放入字符串中,输出字符串。

注意:

Comparable和Comparator都是用来实现集合中元素的比较、排序的。
Comparable是在集合内部定义的方法实现的排序,位于java.util下。Comparator是在集合外部实现的排序,位于java.lang下。

自定义类要在加入list容器中后能够排序,也可以实现Comparable接口,在用Collections类的sort方法排序时若不指定Comparator,那就以自然顺序排序。所谓自然顺序就是实现Comparable接口设定的排序方式。

Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。

实现Comparable接口

示例如下图:

 Comparator比较器完成对象排序

示例如下图:

 解法二:

class Solution {
    public String largestNumber(int[] nums) {
        List<String> list = new ArrayList<>();
        for(int num : nums)
            list.add(num + "");
        
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String str1 = o1 + o2;
                String str2 = o2 + o1;
                
                return str2.compareTo(str1);
            }
        });
        
        StringBuilder res = new StringBuilder();
        for(String str : list)
            res.append(str);

        if(res.charAt(0) == '0')
            return "0";
        return res.toString();
    }

}

此解先创建List集合,再利用list.sort重新书写比较器进行比较,然后用可变字符串StringBuilder 来添加List中元素,最后用tostring方法输出字符串。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01Hashmap并发问题-ConcurrentHashMap-线程安全集合类-并发编程(Java)

1 概述 线程安全类可以分为3个大类&#xff1a; 遗留的的线程安全集合Hashtable&#xff0c;Vector使用Collections装饰的线程安全集合&#xff0c;如&#xff1a; Collections.syncronizedCollectionCollections.syncronizedListCollections.syncronizedMapCollections.sync…

Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)

系列文章目录 文章目录系列文章目录前言一、vim的基本概念二、vim的基本操作1.退出vim编辑器2.进入vim编辑器3.模式功能及切换三、vim命令模式命令集1.光标移动2.查找字符3.复制粘贴删除4.撤销、重做与重复做5.插入模式6.保存与退出7.环境修改四、总结1.vim的三种基本模式2.vim…

springboot之webmvc和webflux浅析

webmvc和webflux作为spring framework的两个重要模块&#xff0c;代表了两个IO模型&#xff0c;阻塞式和非阻塞式。 1、webmvc webmvc是基于servlet的阻塞式模型&#xff0c;一个请求到达服务器后会单独分配一个线程去处理请求&#xff0c;如果请求包含IO操作&#xff0c;线程…

车载以太网 - DoIP时间参数 - 06

时间参数在所有的协议定义中都无法被忽略的一块重要部分,之前的CAN&CANFD诊断协议总,ISO 16765就有相关的诊断时间参数的定义;在DoIP中,也有同样的时间参数定义,不过他是放在ISO 13400 - 2中,今天我们一起来看下这一块的内容。 ISO 13400原文文档 中文释义 时间参数定…

北大硕士LeetCode算法专题课-基础算法之排序

接连上篇&#xff1a;北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种很原始的排序方法&#xff0c;就是通过不断地交换“大数”的位置达到排序的目的。 因为不断出现“大数”类似于水…

HTML实现狗屁不通文章生成器

演示 实现 css html, body {background: radial-gradient(#181818, #000000);margin: 0;padding: 0;border: 0;-ms-overflow-style: none;}.btn {display: inline-block;color: #fff;cursor: pointer;font-size: 1em;font-weight: 400;max-weight: 20%;position: relative;tex…

【零基础】学python数据结构与算法笔记8

文章目录前言46.数据结构介绍47.列表48.栈的介绍49.栈的应用&#xff1a;括号匹配问题50.队列的介绍51.队列的实现52.队列的内置模块总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 46.数据结构介绍 数据结构是指相互之间存在着一种…

双点双向重发布以及路由策略

目录前言实验要求基础配置启动rip 及 ospf 协议双向重发布路由策略前言 1&#xff0c;由于ASBR在重发布路由条目时&#xff0c;将清除原有协议携带的度量&#xff0c;会添加新协议的度量种子&#xff0c;一旦2&#xff0c;使用双点双向重发布时&#xff0c;可能会出现选路不佳…

docker容器日志清理

最近发现linux&#xff08;Centos 7&#xff09;虚拟机的空间不够了&#xff0c;想创建新的容器都失败。剩下不到100M。之前还有好几个G。然后每天不定期查看磁盘空间&#xff0c;发现不断被蚕食。今天比昨天就少了100M&#xff1b;然后下午比上午又少了50M。谁在吞噬服务器的硬…

Nacos学习之使用Nacos作为配置中心

使用Nacos作为配置中心 简单使用 1、导入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-config</artifactId></dependency>2、创建bootstrap.properties文件&#xff0c;在其中对nacos…

Vulnhub靶机:MATRIX-BREAKOUT_ 2 MORPHEUS

目录介绍信息收集主机发现主机信息探测网站探测目录爆破反弹shell提权Flag1内核提权 & Flag2介绍 系列&#xff1a;Matrix-Breakout&#xff08;此系列共1台&#xff09; 发布日期&#xff1a;2022 年 7 月 11 日 难度&#xff1a;中级 运行环境&#xff1a;Virtualbox运行…

快速搭建ChatGPT的AI聊天QQ机器人[含问题解决办法]

一、cqhttp 1. 下载cqhttp 首先安装 cqhttp 框架&#xff0c;我们从 release 界面下载最新版本的 go-cqhttp&#xff0c;需要根据不同的系统选择不同的文件 我目前是mac系统&#xff0c;暂时仅举例macOs Intel 版 Macos&#xff1a; go-cqhttp_darwin_amd64.tar.gz 2. 启动 …

jvm运行过程

VM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自己的代码和数据空间. JVM体系主要是两个JVM的内部体系结构分为三个子系统和两大组件&#xff0c;分别是&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、执行引擎…

5.1、运输层概述

之前所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信\color{red}实现了主机到主机的通信实现了主机到主机的通信。 网络层的作用范围主机到主机 但实际上在计算机网络中…

帮助聊天回复的软件

在线客服在工作时&#xff0c;时常能遇到在某一个时间段一大批客户集中咨询的情况&#xff0c;使用客服快速回复软件能够使客服在第一时间进行高效的回复。 前言 在线客服在工作时&#xff0c;时常能遇到在某一个时间段一大批客户集中咨询的情况&#xff0c;通常这种情况下也是…

P2010 [NOIP2016 普及组] 回文日期————C++

题目 [NOIP2016 普及组] 回文日期 题目背景 NOIP2016 普及组 T2 题目描述 在日常生活中&#xff0c;通过年、月、日这三个要素可以表示出一个唯一确定的日期。 牛牛习惯用 888 位数字表示一个日期&#xff0c;其中&#xff0c;前 444 位代表年份&#xff0c;接下来 222 位…

算法测试中的召回率和精确率详解

基本概念 TP&#xff08;True Positive&#xff09;&#xff1a;正确的正例&#xff0c;一个实例是正类并且也被判定成正类FN&#xff08;False Negative&#xff09;&#xff1a;错误的反例&#xff0c;漏报&#xff0c;本为正类但判定为假类FP&#xff08;False Positive&am…

基于 java springboot+mybatis二手物品网站系统设计和实现

基于 java springbootmybatis二手物品网站系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获…

linux系统中QT里面多线程的使用方法

大家好&#xff0c;今天主要和大脚聊一聊&#xff0c;如何使用QT中的多线程的方法。 第一&#xff1a;多线程基本简介 QThread 线程类是实现多线程的核心类。Qt 有两种多线程的方法&#xff0c;其中一种是继承 QThread 的 run()函数&#xff0c;另外一种是把一个继承于 QObject…

Excel教程

目录 1.设置Excel界面以及保存Excel 1.1 自定义快速访问工具栏 1.2 自定义功能区的使用 1.2.1 自定义选项卡 1.3 自定义页面 1.4 保存时设置文件密码 2.常用的高效操作 2.1 快速填充 2.1.1 快速填充实现拆分重组 2.2 快速分析数据 2.2.1 格式化​编辑 2.2.2 图表&#xff0c…