Skip to content

Commit 5782cfd

Browse files
committed
feat: add solutions to lc problem: No.0165.Compare Version Numbers
1 parent f787456 commit 5782cfd

File tree

6 files changed

+225
-13
lines changed

6 files changed

+225
-13
lines changed

solution/0100-0199/0165.Compare Version Numbers/README.md

+84-2
Original file line numberDiff line numberDiff line change
@@ -71,27 +71,109 @@
7171
<li><code>version1</code> 和 <code>version2</code> 的所有修订号都可以存储在 <strong>32 位整数</strong> 中</li>
7272
</ul>
7373

74-
7574
## 解法
7675

7776
<!-- 这里可写通用的实现逻辑 -->
7877

78+
**1. 字符串分割**:分割两个字符串,比较对应的修订号。
79+
80+
**2. 双指针**
81+
7982
<!-- tabs:start -->
8083

8184
### **Python3**
8285

8386
<!-- 这里可写当前语言的特殊实现逻辑 -->
8487

85-
```python
88+
双指针。
8689

90+
```python
91+
class Solution:
92+
def compareVersion(self, version1: str, version2: str) -> int:
93+
i, j, m, n = 0, 0, len(version1), len(version2)
94+
while i < m or j < n:
95+
a = b = 0
96+
while i < m and version1[i] != '.':
97+
a = a * 10 + int(version1[i])
98+
i += 1
99+
while j < n and version2[j] != '.':
100+
b = b * 10 + int(version2[j])
101+
j += 1
102+
if a != b:
103+
return -1 if a < b else 1
104+
i += 1
105+
j += 1
106+
return 0
87107
```
88108

89109
### **Java**
90110

91111
<!-- 这里可写当前语言的特殊实现逻辑 -->
92112

93113
```java
114+
class Solution {
115+
public int compareVersion(String version1, String version2) {
116+
for (int i = 0, j = 0; i < version1.length() || j < version2.length(); ++i, ++j) {
117+
int a = 0, b = 0;
118+
while (i < version1.length() && version1.charAt(i) != '.') {
119+
a = a * 10 + version1.charAt(i++) - '0';
120+
}
121+
while (j < version2.length() && version2.charAt(j) != '.') {
122+
b = b * 10 + version2.charAt(j++) - '0';
123+
}
124+
if (a != b) {
125+
return a < b ? -1 : 1;
126+
}
127+
}
128+
return 0;
129+
}
130+
}
131+
```
132+
133+
### **C++**
134+
135+
```cpp
136+
class Solution {
137+
public:
138+
int compareVersion(string version1, string version2) {
139+
for (int i = 0, j = 0; i < version1.size() || j < version2.size(); ++i, ++j)
140+
{
141+
int a = 0, b = 0;
142+
while (i < version1.size() && version1[i] != '.')
143+
a = a * 10 + version1[i++] - '0';
144+
while (j < version2.size() && version2[j] != '.')
145+
b = b * 10 + version2[j++] - '0';
146+
if (a != b)
147+
return a < b ? -1 : 1;
148+
}
149+
return 0;
150+
}
151+
};
152+
```
94153
154+
### **Go**
155+
156+
```go
157+
func compareVersion(version1 string, version2 string) int {
158+
for i, j := 0, 0; i < len(version1) || j < len(version2); i, j = i+1, j+1 {
159+
a, b := 0, 0
160+
for i < len(version1) && version1[i] != '.' {
161+
a = a*10 + int(version1[i]-'0')
162+
i++
163+
}
164+
for j < len(version2) && version2[j] != '.' {
165+
b = b*10 + int(version2[j]-'0')
166+
j++
167+
}
168+
if a < b {
169+
return -1
170+
}
171+
if a > b {
172+
return 1
173+
}
174+
}
175+
return 0
176+
}
95177
```
96178

97179
### **...**

solution/0100-0199/0165.Compare Version Numbers/README_EN.md

+78-2
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,97 @@
7070
<li>All the given revisions in&nbsp;<code>version1</code> and <code>version2</code>&nbsp;can be stored in&nbsp;a&nbsp;<strong>32-bit integer</strong>.</li>
7171
</ul>
7272

73-
7473
## Solutions
7574

7675
<!-- tabs:start -->
7776

7877
### **Python3**
7978

8079
```python
81-
80+
class Solution:
81+
def compareVersion(self, version1: str, version2: str) -> int:
82+
i, j, m, n = 0, 0, len(version1), len(version2)
83+
while i < m or j < n:
84+
a = b = 0
85+
while i < m and version1[i] != '.':
86+
a = a * 10 + int(version1[i])
87+
i += 1
88+
while j < n and version2[j] != '.':
89+
b = b * 10 + int(version2[j])
90+
j += 1
91+
if a != b:
92+
return -1 if a < b else 1
93+
i += 1
94+
j += 1
95+
return 0
8296
```
8397

8498
### **Java**
8599

86100
```java
101+
class Solution {
102+
public int compareVersion(String version1, String version2) {
103+
for (int i = 0, j = 0; i < version1.length() || j < version2.length(); ++i, ++j) {
104+
int a = 0, b = 0;
105+
while (i < version1.length() && version1.charAt(i) != '.') {
106+
a = a * 10 + version1.charAt(i++) - '0';
107+
}
108+
while (j < version2.length() && version2.charAt(j) != '.') {
109+
b = b * 10 + version2.charAt(j++) - '0';
110+
}
111+
if (a != b) {
112+
return a < b ? -1 : 1;
113+
}
114+
}
115+
return 0;
116+
}
117+
}
118+
```
119+
120+
### **C++**
121+
122+
```cpp
123+
class Solution {
124+
public:
125+
int compareVersion(string version1, string version2) {
126+
for (int i = 0, j = 0; i < version1.size() || j < version2.size(); ++i, ++j)
127+
{
128+
int a = 0, b = 0;
129+
while (i < version1.size() && version1[i] != '.')
130+
a = a * 10 + version1[i++] - '0';
131+
while (j < version2.size() && version2[j] != '.')
132+
b = b * 10 + version2[j++] - '0';
133+
if (a != b)
134+
return a < b ? -1 : 1;
135+
}
136+
return 0;
137+
}
138+
};
139+
```
87140
141+
### **Go**
142+
143+
```go
144+
func compareVersion(version1 string, version2 string) int {
145+
for i, j := 0, 0; i < len(version1) || j < len(version2); i, j = i+1, j+1 {
146+
a, b := 0, 0
147+
for i < len(version1) && version1[i] != '.' {
148+
a = a*10 + int(version1[i]-'0')
149+
i++
150+
}
151+
for j < len(version2) && version2[j] != '.' {
152+
b = b*10 + int(version2[j]-'0')
153+
j++
154+
}
155+
if a < b {
156+
return -1
157+
}
158+
if a > b {
159+
return 1
160+
}
161+
}
162+
return 0
163+
}
88164
```
89165

90166
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int compareVersion(string version1, string version2) {
4+
for (int i = 0, j = 0; i < version1.size() || j < version2.size(); ++i, ++j)
5+
{
6+
int a = 0, b = 0;
7+
while (i < version1.size() && version1[i] != '.')
8+
a = a * 10 + version1[i++] - '0';
9+
while (j < version2.size() && version2[j] != '.')
10+
b = b * 10 + version2[j++] - '0';
11+
if (a != b)
12+
return a < b ? -1 : 1;
13+
}
14+
return 0;
15+
}
16+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func compareVersion(version1 string, version2 string) int {
2+
for i, j := 0, 0; i < len(version1) || j < len(version2); i, j = i+1, j+1 {
3+
a, b := 0, 0
4+
for i < len(version1) && version1[i] != '.' {
5+
a = a*10 + int(version1[i]-'0')
6+
i++
7+
}
8+
for j < len(version2) && version2[j] != '.' {
9+
b = b*10 + int(version2[j]-'0')
10+
j++
11+
}
12+
if a < b {
13+
return -1
14+
}
15+
if a > b {
16+
return 1
17+
}
18+
}
19+
return 0
20+
}

solution/0100-0199/0165.Compare Version Numbers/Solution.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
class Solution {
22
public int compareVersion(String version1, String version2) {
3-
if(version1 == null || version2 == null) return 0;
4-
char[] v1 = version1.toCharArray();
5-
char[] v2 = version2.toCharArray();
6-
for (int i = 0,j = 0;i < v1.length || j < v2.length;i++,j++){
7-
int ver1 = 0, ver2 = 0;
8-
for (;i<v1.length && v1[i]!='.';i++) ver1 = ver1 * 10 + v1[i] - '0';
9-
for (;j<v2.length && v2[j]!='.';j++) ver2 = ver2 * 10 + v2[j] - '0';
10-
if(ver1 < ver2) return -1;
11-
else if(ver1 > ver2) return 1;
3+
for (int i = 0, j = 0; i < version1.length() || j < version2.length(); ++i, ++j) {
4+
int a = 0, b = 0;
5+
while (i < version1.length() && version1.charAt(i) != '.') {
6+
a = a * 10 + version1.charAt(i++) - '0';
7+
}
8+
while (j < version2.length() && version2.charAt(j) != '.') {
9+
b = b * 10 + version2.charAt(j++) - '0';
10+
}
11+
if (a != b) {
12+
return a < b ? -1 : 1;
13+
}
1214
}
1315
return 0;
1416
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def compareVersion(self, version1: str, version2: str) -> int:
3+
i, j, m, n = 0, 0, len(version1), len(version2)
4+
while i < m or j < n:
5+
a = b = 0
6+
while i < m and version1[i] != '.':
7+
a = a * 10 + int(version1[i])
8+
i += 1
9+
while j < n and version2[j] != '.':
10+
b = b * 10 + int(version2[j])
11+
j += 1
12+
if a != b:
13+
return -1 if a < b else 1
14+
i += 1
15+
j += 1
16+
return 0

0 commit comments

Comments
 (0)