zoukankan      html  css  js  c++  java
  • [Swift]LeetCode670. 最大交换 | Maximum Swap

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10492653.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

    Example 1:

    Input: 2736
    Output: 7236
    Explanation: Swap the number 2 and the number 7. 

    Example 2:

    Input: 9973
    Output: 9973
    Explanation: No swap. 

    Note:

    1. The given number is in the range [0, 10^8]

    给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

    示例 1 :

    输入: 2736
    输出: 7236
    解释: 交换数字2和数字7。
    

    示例 2 :

    输入: 9973
    输出: 9973
    解释: 不需要交换。
    

    注意:

    1. 给定数字的范围是 [0, 10^8]

    Runtime: 8 ms
    Memory Usage: 19 MB
     1 class Solution {
     2     func maximumSwap(_ num: Int) -> Int {
     3         var arr:[Character] = Array(String(num))
     4         var res:Int = num
     5         var n:Int = arr.count
     6         var str:String = String()
     7         for i in 0..<n
     8         {
     9             for j in (i + 1)..<n
    10             {
    11                 arr.swapAt(i,j)
    12                 str = String(arr)
    13                 res = max(res, Int(str) ?? 0)
    14                 arr.swapAt(i,j)
    15             }
    16         }
    17         return res
    18     }
    19 }

    8ms

     1 class Solution {
     2     func maximumSwap(_ num: Int) -> Int {
     3         let str = String(num)
     4         var arr = Array(str)
     5         var sortedNumbers = arr.sorted()
     6         sortedNumbers = sortedNumbers.reversed()
     7         
     8         var index = 0
     9         while index < arr.count - 1 && arr[index] == sortedNumbers[index]{            
    10             index += 1
    11         }
    12         if index >= arr.count - 1 {
    13             return num
    14         }
    15         let temp = arr[index]
    16         var indexNeedChanged = index
    17         for i in (index ..< arr.count).reversed() {
    18             if arr[i] == sortedNumbers[index] {
    19                 indexNeedChanged = i
    20                 break
    21             }
    22         }
    23         arr[index] = sortedNumbers[index]    
    24         arr[indexNeedChanged] = temp
    25         let ns = String(arr)
    26         return Int(ns)!
    27     }
    28 }

    20ms

     1 class Solution {
     2     func maximumSwap(_ num: Int) -> Int {
     3         var nums = [String]()
     4         for char in "(num)" {
     5             nums.append(char.description)
     6         }
     7         
     8         let count = nums.count
     9         for i in 0..<count - 1 {
    10             var mark = count - 1
    11             for j in (i + 1..<count).reversed() {
    12                 if nums[j] > nums[mark] {
    13                     mark = j
    14                 }
    15             }
    16             print(i)
    17             print(mark)
    18             if nums[mark] > nums[i] {
    19                 let temp = nums[i]
    20                 nums[i] = nums[mark]
    21                 nums[mark] = temp
    22                 return Int(nums.joined()) ?? 0
    23             }
    24         }
    25         return num
    26     }
    27 }

    24ms

     1 class Solution {
     2     func maximumSwap(_ num: Int) -> Int {
     3         var num = num
     4         var nums: [Int] = []
     5         
     6         while num > 0 {
     7             nums.append(num % 10)
     8             num /= 10
     9         }
    10         
    11         for n in stride(from: nums.count-1, to: -1, by: -1) {
    12             var mx = nums[0]
    13             var idx = 0
    14             for k in 0..<n {
    15                 if nums[k] > mx {
    16                     mx = nums[k]
    17                     idx = k
    18                 }
    19             }
    20             if mx > nums[n] {
    21                 nums.swapAt(idx, n)
    22                 break
    23             }
    24         }
    25         
    26         var res = 0
    27         for n in nums.reversed() {
    28             res = res * 10 + n
    29         }
    30         
    31         return res
    32     }
    33 }
  • 相关阅读:
    制作一个漂亮的表格
    模版语言
    Django 学习
    linux系统服务名称
    CentOS下netstat + awk 查看tcp的网络连接状态
    Python的MySQLdb模块安装
    shellinabox安装
    堡垒机 paramiko 自动登陆代码
    堡垒机 paramiko代码
    Paramiko 模块使用
  • 原文地址:https://www.cnblogs.com/strengthen/p/10492653.html
Copyright © 2011-2022 走看看