【python】Leetcode每日一题-最大数

【题目描述】

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

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

示例1:

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

示例2:

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

示例3:

输入:nums = [1]
输出:"1"

提示:

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

【分析】

  • 分治法的思想

    感觉这题寻常思路(单纯比大小)会有很多坑,由此想到更契合这题的大小比较方式\(s1+s2>s2+s1=>s1+s2\),即对两个数经过这样的比较后即可确定两者前后关系,如\([4,42]\),比较 \(442 > 424\),需要把 \(4\) 放在前面。如此而来,只需要比较\(C_n^m\)即可。这时可以用到递归分治的思路,即数组第一个数与其他数的位置关系,再递归分治比这个数小的以及比这个数大的其他数即可。

    递归式:\(parse(left) + str(nums[0]) + parse(right)\)

  • 代码

class Solution:
def largestNumber(self, nums: List[int]) -> str:
m = self.parse(nums)
if m[0] == "0":
return "0"
return m def parse(self, nums):
if len(nums) == 0:
return ""
if len(nums) == 1:
return str(nums[0])
left = []
right = []
for i in range(1, len(nums)):
if int(str(nums[i]) + str(nums[0])) > int(str(nums[0]) + str(nums[i])):
left.append(nums[i])
else:
right.append(nums[i])
return self.parse(left) + str(nums[0]) + self.parse(right)
  • 看了官方及一些题解,使用的基本上都是lambda表达式,即自定义比较式。

    官方:
    var largestNumber = function(nums) {
    nums.sort((x, y) => { //这一段即是比较str(x)+str(y)<?>str(y)+str(x)的lambda表达式
    let sx = 10, sy = 10;
    while (sx <= x) {
    sx *= 10; //sx表示比x大一个数量级的值,如,x:24,sx:100
    }
    while (sy <= y) {
    sy *= 10;
    }
    return '' + (sx * y + x) - ('' + (sy * x + y));
    })
    if (nums[0] === 0) {
    return '0';
    }
    return nums.join('');
    };
    python同理:
    from functools import cmp_to_key
    class Solution:
    def largestNumber(self, nums: List[int]) -> str:
    nums.sort(key=cmp_to_key(lambda x,y: int(str(y)+str(x)) - int(str(x)+str(y))))
    ans = ''.join([str(num) for num in nums])
    return str(int(ans))

【python】Leetcode每日一题-最大数的更多相关文章

  1. 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素

    [python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...

  2. 【python】Leetcode每日一题-删除有序数组中的重复项

    [python]Leetcode每日一题-删除有序数组中的重复项 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现一次 ,返回删除后数组的新长度. 不要 ...

  3. 【python】Leetcode每日一题-存在重复元素3

    [python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...

  4. 【python】Leetcode每日一题-扰乱字符串

    [python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...

  5. 【python】Leetcode每日一题-前缀树(Trie)

    [python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...

  6. 【python】Leetcode每日一题-打家劫舍2

    [python]Leetcode每日一题-打家劫舍2 [题目描述] 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋 ...

  7. 【python】Leetcode每日一题-二叉搜索树节点最小距离

    [python]Leetcode每日一题-二叉搜索树节点最小距离 [题目描述] 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例1: 输入:root = [4 ...

  8. 【python】Leetcode每日一题-丑数2

    [python]Leetcode每日一题-丑数2 [题目描述] 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例1: 输入:n = ...

  9. 【python】Leetcode每日一题-丑数

    [python]Leetcode每日一题-丑数 [题目描述] 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 丑数 就是只包含质因数 2.3 和 ...

随机推荐

  1. linux中c语言编程main函数和参数

    linux下main函数的的标准调用函数的标准形式 int main(int char,char *argv[]) 在main函数的两个参数中,argc必须是整型变量,其是命令行的参数的数目,argv ...

  2. SpringCloud 中 Feign 调用使用总结

    最近做微服务架构的项目,在用 feign 来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录. 以下通过分为三种情况说 ...

  3. Blind Super-Resolution Kernel Estimation using an Internal-GAN 论文解读

    背景与思路来源 目前 SR 模型中合成 LR 使用的模糊核问题 目前大多数 SR 的 model 都是用的合成下采样图片来进行训练的,而这些合成的图片常常使用的是 MATLAB 里面的 imresiz ...

  4. JavaSE(一)

    1.标识符 标识符是由数字,字母,下划线,$ 等进行命名的符号,但是不可以以数字开头: 标识符包含了关键字,变量名,他人定义,自己定义的. 2.关键字 关键字是指有特殊用途的符号.由以下50种构成 3 ...

  5. Python 网络编程 C/S建立Socket连接

    分为客户端和服务端 服务端 server.py 客户端 1 #coding=utf-8 2 import socket 3 4 client = socket.socket() #生成socket连接 ...

  6. CSS3新增了哪些新特性

    一.是什么 css,即层叠样式表(Cascading Style Sheets)的简称,是一种标记语言,由浏览器解释执行用来使页面变得更为美观 css3是css的最新标准,是向后兼容的,CSS1/2的 ...

  7. Python数据分析入门(十六):设置可视化图表的信息

    现在我们添加图后,没有指定x轴代表什么,y轴代表什么,以及这个图的标题是什么.因此以下我们通过一些属性来设置一下. 设置线条样式: 使用plot方法:plot方法就是用来绘制线条的,因此可以在绘制的时 ...

  8. thinkphp各版本常用漏洞总结

    0x01 漏洞分析及复现 1.漏洞分析 漏洞影响范围: Thinkphp 5.1.0 - 5.1.31Thinkphp 5.0.5 - 5.0.23 漏洞产生原因: Thinkphp5.x版本(5.0 ...

  9. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  10. PBRT阅读笔记——COLOR AND RADIOMETRY

    四个关键概念 Energy(Q)   每一个光子都有特定的波长并携带特定的能量:      其中c为光速,h为普朗克常量. Flux(Φ)   辐射通量,可以直观理解为功率.是能量对时间微分得到的   ...