6

leetcode 165. 比较版本号

 2 years ago
source link: https://iamxcb.com/leetcode-165.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

leetcode 165. 比较版本号

发表于 2019-06-28

| 0

| 阅读次数:

比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。

示例 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

示例 4:
输入:version1 = “1.01”, version2 = “1.001”
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。

示例 5:
输入:version1 = “1.0”, version2 = “1.0.0”
输出:0
解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。

提示:
版本字符串由以点 (.) 分隔的数字字符串组成。这个数字字符串可能有前导零。
版本字符串不以点开始或结束,并且其中不会有两个连续的点。

首先根据 “.” 分割成数组,然后依次比较每一项的值(可以先转为整数再比较,方便一点)

示例代码(go)

func compareVersion(version1 string, version2 string) int {
arr1 := strings.Split(version1, ".")
arr2 := strings.Split(version2, ".")
m, n := len(arr1), len(arr2)
for i, j := 0, 0 ;i < m || j < n; {
if i < m && j < n {
num1, _ := strconv.Atoi(arr1[i])
num2, _ := strconv.Atoi(arr2[j])
if num1 > num2 {
return 1
}
if num1 < num2 {
return -1
}
i++
j++
} else if i == m && j < n {
num2, _ := strconv.Atoi(arr2[j])
if 0 < num2 {
return -1
}
j++

} else if i < m && j == n {
num1, _ := strconv.Atoi(arr1[i])
if num1 > 0 {
return 1
}
i++
}
}
return 0
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK