leetcode刷题笔记(Golang)--165. Compare Version Numbers

165. Compare Version Numbers

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.

You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4 has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

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
Example 4:

Input: version1 = “1.01”, version2 = “1.001”
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”
Example 5:

Input: version1 = “1.0”, version2 = “1.0.0”
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to “0”

Note:

Version strings are composed of numeric strings separated by dots . and this numeric strings may have leading zeroes.
Version strings do not start or end with dots, and they will not be two consecutive dots.

func compareVersion(version1 string, version2 string) int {
	verSlice1 := Map(strings.Split(version1, "."), strconv.Atoi)
	verSlice2 := Map(strings.Split(version2, "."), strconv.Atoi)
	appendZeros(&verSlice1, &verSlice2)
	for i, v := range verSlice1 {
		if v > verSlice2[i] {
			return 1
		} else if v < verSlice2[i] {
			return -1
		}
	}
	return 0
}

func appendZeros(v1 *[]int, v2 *[]int) {
	lg1 := len(*v1)
	lg2 := len(*v2)
	var short *[]int = v1
	diff := int(math.Abs(float64(lg1 - lg2)))
	if lg1 > lg2 {
		short = v2
	}
	for i := 0; i < diff; i++ {
		*short = append(*short, 0)
	}
}

func Map(strs []string, f func(string) (int, error)) []int {
	res := make([]int, len(strs))
	for i, v := range strs {
		res[i], _ = f(v)
	}
	return res
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值