-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy path165.Compare-Version-Numbers.go
95 lines (81 loc) · 1.41 KB
/
165.Compare-Version-Numbers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// https://leetcode.com/problems/compare-version-numbers/
//
// algorithms
// Medium (22.12%)
// Total Accepted: 120,717
// Total Submissions: 545,849
// beats 100.0% of golang submissions
package leetcode
import (
"strconv"
"strings"
)
func compareVersion(version1 string, version2 string) int {
if version1 == version2 {
return 0
}
arr1 := strings.Split(version1, ".")
arr2 := strings.Split(version2, ".")
len1, len2 := len(arr1), len(arr2)
i, j := 0, 0
for i < len1 && j < len2 {
a, _ := strconv.Atoi(arr1[i])
b, _ := strconv.Atoi(arr2[j])
if a > b {
return 1
} else if a < b {
return -1
}
i++
j++
}
if i < len1 {
for ; i < len1; i++ {
n, _ := strconv.Atoi(arr1[i])
if n != 0 {
break
}
}
}
if j < len2 {
for ; j < len2; j++ {
n, _ := strconv.Atoi(arr2[j])
if n != 0 {
break
}
}
}
if i == len1 && j == len2 {
return 0
}
if i < len1 {
return 1
}
return -1
}
func compareVersion(version1 string, version2 string) int {
arr1, arr2 := strings.Split(version1, "."), strings.Split(version2, ".")
len1, len2 := len(arr1), len(arr2)
for i := 0; i < max(len1, len2); i++ {
var num1, num2 int
if i < len1 {
num1, _ = strconv.Atoi(arr1[i])
}
if i < len2 {
num2, _ = strconv.Atoi(arr2[i])
}
if num1 < num2 {
return -1
}
if num1 > num2 {
return 1
}
}
return 0
}
func max(a, b int) int {
if a > b {
return a
}
return b
}