友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: jikerizhi 。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
165. 比较版本号
给你两个 版本号字符串 version1
和 version2
,请你比较它们。版本号由被点 '.'
分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。
比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 0
。
返回规则如下:
-
如果
version1 < version2
返回-1
, -
如果
version1 > version2
返回1
, -
除此之外返回
0
。
示例 1:
输入:version1 = "1.2", version2 = "1.10"
输出:-1
解释:
version1 的第二个修订号为 "2",version2 的第二个修订号为 "10":2 < 10,所以 version1 < version2。
示例 2:
输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:
忽略前导零,"01" 和 "001" 都代表相同的整数 "1"。
示例 3:
输入:version1 = "1.0", version2 = "1.0.0.0"
输出:0
解释:
version1 有更少的修订号,每个缺失的修订号按 "0" 处理。
提示:
-
1 <= version1.length, version2.length <= 500
-
version1
和version2
仅包含数字和.
-
version1
和version2
都是 有效版本号 -
version1
和version2
的所有修订号都可以存储在 32 位整数 中
思路分析
双指针。一个指针指向一个字符串下标,从指针位置取一个修订号的值,然后比较,再取下一个修订号。
最简单的处理办法是使用 StringTokenizer
。
-
一刷
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
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2025-06-27 20:42:34
*/
public int compareVersion(String version1, String version2) {
int l1 = 0;
int l2 = 0;
while (l1 < version1.length() || l2 < version2.length()) {
int v1 = 0;
int l1n = l1;
while (l1n < version1.length() && version1.charAt(l1n) != '.') {
l1n++;
}
if (l1 < l1n) {
v1 = Integer.parseInt(version1.substring(l1, l1n));
l1 = l1n + 1;
}
int v2 = 0;
int l2n = l2;
while (l2n < version2.length() && version2.charAt(l2n) != '.') {
l2n++;
}
if (l2 < l2n) {
v2 = Integer.parseInt(version2.substring(l2, l2n));
l2 = l2n + 1;
}
int compare = Integer.compare(v1, v2);
if (compare != 0) {
return compare;
}
}
return 0;
// // 最简单的的方式
// StringTokenizer st1 = new StringTokenizer(version1, ".");
// StringTokenizer st2 = new StringTokenizer(version2, ".");
// while (st1.hasMoreTokens() || st2.hasMoreTokens()) {
// int v1 = st1.hasMoreTokens() ? Integer.parseInt(st1.nextToken()) : 0;
// int v2 = st2.hasMoreTokens() ? Integer.parseInt(st2.nextToken()) : 0;
// int compare = Integer.compare(v1, v2);
// if (compare != 0) {
// return compare;
// }
// }
// return 0;
}
参考资料
-
165. 比较版本号 - 不用`split` 和
atoi
从左至右逐位对比版本号 — 这个双指针做法也不错!