iOS算法题

IOS 算法(中级篇) ----- 最大数

2021-04-12  本文已影响0人  ShawnAlex

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
1 <= nums.length <= 100
0 <= nums[i] <= 109

例子

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

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

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

解题思路

排序法

题意不算难理解, 排序找最大数值

首先重点理解2点即可, 尤其第一点

例如

  1. [80, 9], 虽然80 > 9, 但是 809 < 980, 首位大的要放在前面,
  2. [30, 3], 虽然首位 3 = 3 , 但是 330 > 303, 需要判断最后位

这点我们可以通过转成 "字符串求和" 来判断处理

代码

未翻译版
    func largestNumber(_ nums: [Int]) -> String {
        
        let temp = nums.sorted{
            i, j in
            let istr = String(i), jstr = String(j)
            return istr + jstr >  jstr + istr
        }
        
        var result = ""
        for i in temp {
            result += String(i)
        }
        
        return result.first == "0" ? "0" : result

    }

翻译版
    func largestNumber(_ nums: [Int]) -> String {
        
        // 将nums排序, 由大到小 
        // 重点"istr + jstr >  jstr + istr" 这块
        // 转成字符串之和, 判断顺序
        let temp = nums.sorted{
            i, j in
            let istr = String(i), jstr = String(j)
            return istr + jstr >  jstr + istr
        }
        
        // 循环字符串求和
        var result = ""
        for i in temp {
            result += String(i)
        }
        
        // 留意下"000..."返回"0", 否则result返回
        return result.first == "0" ? "0" : result

    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

上一篇 下一篇

猜你喜欢

热点阅读