数组,字符串---对位相加或者比较之类的题目

前言

力扣有这么一种题,就是给你两个数组或者字符串进行对位比较或者相加,做这种题的时候,我每次都会给自己挖坑,增大了代码量,比如,

    1. 比较版本号
    1. 字符串相加

就以下面这个例子说下的我给自己挖的坑

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
}

你可能感兴趣的:(算法,前端,算法,javascript)