题目描述
给你两个版本号 version1
和 version2
,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 .
连接。每个修订号由多位数字组成,可能包含前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。例如,2.5.33
和0.1
都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为0
。例如,版本1.0
小于版本1.1
,因为它们下标为0
的修订号相同,而下标为1
的修订号分别为0
和1
,0
<1
。
返回规则如下:
如果 version1 > version2 返回 1,
如果 version1 < version2 返回 -1,
除此之外返回 0。
思路
以`.`为分割分别比较每个修订号所代表的字符串的大小,
可用10进制转化的方式存到`int`里,注意当一个修订号为`0`,
另一个为`""`时,也要进行比较。
代码
class Solution {
public:
int compareVersion(string version1, string version2) {
int n1 = version1.size();
int n2 = version2.size();
int cur1 = 0, cur2 = 0;
while(cur1 < n1 || cur2 < n2){
int num1 = 0, num2 = 0;
while(cur1 < n1 && version1[cur1] != ‘.‘){
num1 = num1 * 10 + version1[cur1] - ‘0‘;
cur1++;
}
while(cur2 < n2 && version2[cur2] != ‘.‘){
num2 = num2 * 10 + version2[cur2] - ‘0‘;
cur2++;
}
if(num1 > num2) return 1;
if(num1 < num2) return -1;
cur1++;
cur2++;
}
return 0;
}
};