数据结构与算法之字符串: LeetCode 165. 比较版本号 (Ts版)
·
比较版本号
描述
-
给你两个 版本号字符串 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 位整数 中
Typescript 版算法实现
1 ) 方案1: 字符串分割
function compareVersion(version1: string, version2: string): number {
const v1 = version1.split('.');
const v2 = version2.split('.');
for (let i = 0; i < v1.length || i < v2.length; ++i) {
let x = 0, y = 0;
if (i < v1.length) {
x = parseInt(v1[i]);
}
if (i < v2.length) {
y = parseInt(v2[i]);
}
if (x > y) return 1;
if (x < y) return -1;
}
return 0;
};
2 ) 方案2:双指针
function compareVersion(version1: string, version2: string): number {
let i = 0, j = 0;
const n = version1.length, m = version2.length;
while (i < n || j < m) {
let x = 0;
// 解析 version1 的当前修订号
for (; i < n && version1[i] !== '.'; ++i) {
x = x * 10 + parseInt(version1[i], 10);
}
++i; // 跳过点号
let y = 0;
// 解析 version2 的当前修订号
for (; j < m && version2[j] !== '.'; ++j) {
y = y * 10 + parseInt(version2[j], 10);
}
++j; // 跳过点号
if (x !== y) {
return x > y ? 1 : -1;
}
}
return 0;
}
更多推荐
所有评论(0)