leetcode 165 比较版本号 JavaScript
思路一:
将version1、version2分别分割,放入数组中,接下来从左往右读取v1和v2的内容对比,一旦出现大于或者小于的情况,遍历提前结束,返回-1或1;否则,如果遍历完成后仍然没有出现更大的一方,返回0
(不太理解为什么这道题是中等,可能是企业面试不让用split(‘.’),那还有另外一种思路就是写双指针了,晚点更新双指针方法)
代码如下:
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function(version1, version2) {
let ver1 = version1.split('.');
let ver2 = version2.split('.');
for(let i = 0;i<Math.max(ver1.length,ver2.length);i++){
let tmp1 = ver1[i]?parseInt(ver1[i]):0;
let tmp2 = ver2[i]?parseInt(ver2[i]):0;
if(tmp1>tmp2){
return 1;
}
if(tmp1<tmp2){
return -1;
}
}
return 0;
};
思路二:(双指针)
双指针法直接对字符串进行遍历,每次进入都将原始值乘10再加上当前遍历的数 比如1.101 第一次遍历 值为1结束;下一次循环是遍历101,一开始1,之后1x10+0=10 最后10*10+1=101遍历结束。也就是每次都获取到两个.之间的值,然后进行比较。
var compareVersion = function(version1, version2) {
let i = 0;
let j = 0;
while(i<version1.length||j<version2.length){
let res1 = 0;
let res2 = 0;
while(i<version1.length&&version1.charAt(i)!='.'){
res1 = res1*10 + (version1.charAt(i++)-'0');
}
while(j<version2.length&&version2.charAt(j)!='.'){
res2 = res2*10 +(version2.charAt(j++)-'0');
}
if(res1>res2) return 1;
if(res1<res2) return -1;
i++;
j++;
}
return 0;
};