前言
力扣有这么一种题,就是给你两个数组或者字符串进行对位比较或者相加,做这种题的时候,我每次都会给自己挖坑,增大了代码量,比如,
-
- 比较版本号
-
- 字符串相加
就以下面这个例子说下的我给自己挖的坑
165. 比较版本号
先看看我写的
我是上来先把两个数组差的位数补齐,注意for循环就给自己挖了坑,因为不知道哪个数组长,所以必须补位,否则有可能取不到
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function (version1, version2) {
let v1 = version1.split('.')
let v2 = version2.split('.')
let i2 = 0
// v1和v2两个数组长度可能不相同
if (v1.length > v2.length) {
let count = v1.length - v2.length
while (count--) {
v2.push(0)
}
}
if (v1.length < v2.length) {
let count = v2.length - v1.length
while (count--) {
v1.push(0)
}
}
// 坑
for (let i1 = 0; i1 < v1.length; i1++) {
n1 = parseInt(v1[i1])
n2 = parseInt(v2[i2])
if (n1 > n2) {
return 1
} else if (n1 < n2) {
return -1
}
i2++
}
return 0
}
其实直接while
利用两个变量分别遍历两个数组,利用while循环,只要两个数组中任意一个数组还有没取到的元素,就继续进行循环,先遍历完的数组用0代替
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function (version1, version2) {
let v1 = version1.split('.')
let v2 = version2.split('.')
let i1 = 0
let i2 = 0
while(i1 < v1.length || i2 < v2.length) {
n1 = parseInt(v1[i1]) || 0
n2 = parseInt(v2[i2]) || 0
if(n1 > n2) return 1
if(n1 < n2) return -1
i1++
i2++
}
return 0
}