zoukankan      html  css  js  c++  java
  • [Swift]LeetCode165. 比较版本号 | Compare Version Numbers

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

    Compare two version numbers version1 and version2.
    If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0.

    You may assume that the version strings are non-empty and contain only digits and the .character.
    The . character does not represent a decimal point and is used to separate number sequences.
    For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

    Example 1:

    Input: version1 = "0.1", version2 = "1.1"
    Output: -1

    Example 2:

    Input: version1 = "1.0.1", version2 = "1"
    Output: 1

    Example 3:

    Input: version1 = "7.5.2.4", version2 = "7.5.3"
    Output: -1

    比较两个版本号 version1 和 version2
    如果 version1 version2 返回 1,如果 version1 version2 返回 -1, 除此之外返回 0

    你可以假设版本字符串非空,并且只包含数字和 . 字符。

     . 字符不代表小数点,而是用于分隔数字序列。

    例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。

    示例 1:

    输入: version1 = "0.1", version2 = "1.1"
    输出: -1

    示例 2:

    输入: version1 = "1.0.1", version2 = "1"
    输出: 1

    示例 3:

    输入: version1 = "7.5.2.4", version2 = "7.5.3"
    输出: -1

    8ms
     1 class Solution {
     2     func compareVersion(_ version1: String, _ version2: String) -> Int {
     3         var numbers1 = version1.split(separator: ".").compactMap { Int(String($0)) }
     4         var numbers2 = version2.split(separator: ".").compactMap { Int(String($0)) }
     5         let numDiff = numbers1.count - numbers2.count
     6         
     7         if numDiff < 0 {
     8             numbers1.append(contentsOf: Array(repeating: 0, count: -numDiff))
     9         } else if numDiff > 0 {
    10             numbers2.append(contentsOf: Array(repeating: 0, count: numDiff))
    11         }
    12         
    13         for i in 0..<numbers1.count {
    14             let diff = numbers1[i] - numbers2[i]
    15             if diff != 0 {
    16                 return diff < 0 ? -1 : 1
    17             }
    18         }
    19         
    20         return 0
    21     }
    22 }

    12ms

     1 import Foundation
     2 
     3 class Solution {
     4     func compareVersion(_ version1: String, _ version2: String) -> Int {
     5         var version1Components = version1.components(separatedBy: ".")
     6         var version2Components = version2.components(separatedBy: ".")
     7         
     8         let difference = abs(version1Components.count - version2Components.count)
     9         let array = Array(repeating: "0", count: difference)
    10         
    11         if version1Components.count > version2Components.count {
    12             version2Components.append(contentsOf: array)
    13         } else if version2Components.count > version1Components.count {
    14             version1Components.append(contentsOf: array)
    15         }
    16         
    17         for (n1, n2) in zip(version1Components, version2Components) {
    18             let number1 = Int(n1)!
    19             let number2 = Int(n2)!
    20             
    21             if number1 > number2 {
    22                 return 1
    23             } else if number2 > number1 {
    24                 return -1
    25             }
    26         }
    27         
    28         return 0
    29     }
    30 }

    12ms

     1 class Solution {
     2     func compareVersion(_ version1: String, _ version2: String) -> Int {
     3         let lhsA = version1.components(separatedBy: ".")
     4         let rhsA = version2.components(separatedBy: ".")
     5         for i in 0 ..< max(lhsA.count, rhsA.count) {
     6             var lInt: Int, rInt: Int
     7             if i >= lhsA.count {
     8                 lInt = 0
     9             } else {
    10                 lInt = Int(atoi(lhsA[i]))
    11             }
    12             
    13             if i >= rhsA.count {
    14                 rInt = 0
    15             } else {
    16                 rInt = Int(atoi(rhsA[i]))
    17             }
    18             
    19             if lInt > rInt {
    20                 return 1
    21             } else if lInt < rInt {
    22                 return -1
    23             }
    24         }
    25         return 0
    26     }
    27 }

    16ms

     1 class Solution {
     2     func compareVersion(_ version1: String, _ version2: String) -> Int {
     3         let arr1 = version1.split(separator: ".")
     4         let arr2 = version2.split(separator: ".")
     5         var i = 0
     6         while i < arr1.count || i < arr2.count {
     7             if i < arr1.count && i < arr2.count {
     8                 if Int(String(arr1[i]))! > Int(String(arr2[i]))! {
     9                     return 1
    10                 } else if Int(String(arr1[i]))! < Int(String(arr2[i]))! {
    11                     return -1
    12                 }
    13             } else if i < arr1.count {
    14                 if Int(String(arr1[i]))! != 0 {
    15                     return 1
    16                 }
    17             } else if i < arr2.count {
    18                 if Int(String(arr2[i]))! != 0 {
    19                     return -1
    20                 }
    21             }
    22             i += 1
    23         }
    24         return 0
    25     }
    26 }

    16ms

     1 class Solution {
     2     func compareVersion(_ version1: String, _ version2: String) -> Int {
     3         let ver1 = version1.components(separatedBy:".")
     4     let ver2 = version2.components(separatedBy:".")
     5     let maxLength = max(ver1.count, ver2.count)
     6     for index in 0..<maxLength {
     7         let v1:Int = index < ver1.count ? (Int)(ver1[index])! : 0
     8         let v2:Int = index < ver2.count ? (Int)(ver2[index])! : 0
     9         if (v1 > v2) {
    10             return 1
    11         } else if (v1 < v2) {
    12             return -1;
    13         }
    14     }
    15     return 0
    16     }
    17 }

    24ms

     1 class Solution {
     2     func compareVersion(_ version1: String, _ version2: String) -> Int {
     3         var v1Arr = version1.components(separatedBy: ".").map{Int($0)!}
     4         var v2Arr = version2.components(separatedBy: ".").map{Int($0)!}
     5         
     6         for i in stride(from: v1Arr.count-1, to: -1, by: -1) {
     7             if v1Arr[i] == 0 {
     8                 v1Arr.remove(at: i)
     9             }else {
    10                 break
    11             }
    12         }
    13         
    14         for i in stride(from: v2Arr.count-1, to: -1, by: -1) {
    15             if v2Arr[i] == 0 {
    16                 v2Arr.remove(at: i)
    17             }else {
    18                 break
    19             }
    20         }
    21         
    22         if v1Arr.count < v2Arr.count {
    23             return -1 * compareVersion(version2,version1)
    24         }
    25         
    26         for i in 0..<v2Arr.count {
    27             if v1Arr[i] > v2Arr[i] {
    28                 return 1
    29             }
    30             if v2Arr[i] > v1Arr[i] {
    31                 return -1
    32             }
    33         }
    34         if v1Arr.count > v2Arr.count {
    35             return 1
    36         }else {
    37             return 0
    38         }
    39     }
    40 }
  • 相关阅读:
    关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
    关于SQL SERVER 2008 X64版本报错:消息 7302,级别 16,无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的实例。
    Response.Redirect(),Server.Transfer(),Server.Execute()的区别[转]
    ASP.net应用程序中如何调用客户端的Javascript脚本小结(转)
    重写ListView控件,实现点击列头排序的功能
    关于Response.redirect和Response.End出现线程中止异常的处理(转)
    持续集成cruisecontrol.net学习总结
    [转]关于PowerDesigner反向工程SQL Server2000数据库时生成注释的解决方法
    敏捷开发scrum学习笔记一
    asp.net缓存机制总结(转)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10127066.html
Copyright © 2011-2022 走看看