稍微改进边界条件

来源:6-2 复原IP地址-代码演示

Nick_arron

2019-07-30

leetcode 上有两个测试无法通过,第一个是’010010’,分割中出现了010的情况,ip中可以存在个位数的0,但不能存在01,010这种情况;第二种是内存溢出,"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",这个测试用例也无法通过。

  1. 针对1,获取temp时主动将字符串转为数字;如果是01或者010的情况,前面的0会被去掉,此时拼接后的字符串一定不等于原有字符串,也就排除了哪些错误答案。
  2. 针对2,在search中判断cur长度为4,但拼接后不等于s时,可以终止递归;
function restoreIpAddresses (s) {
  let result = []
  let search = (cur, sub) => {
    if (cur.length === 4 && cur.join('') !== s) return
    if (cur.length === 4 && cur.join('') === s) {
      result.push(cur.join('.'))
    } else {
      for (let i = 0, len = Math.min(3, sub.length), temp; i < len; i++) {
        temp = +sub.substr(0, i + 1) // 截取第1-3个字符
        if (temp < 256) {
          search(cur.concat([temp]), sub.substr(i + 1))
        }
      }
    }
  }
  search([], s)
  return result
}
写回答

2回答

慕斯616794

2019-09-15

同学,考虑得周到!但是temp转为Number类型之后使用startsWith还要转回去 是吧?

0
1
Nick_arron
是的,这里我疏忽了,其实转为数字后,不需要再判断是否由0起始了,两个判断重复了。已经去掉了
2019-09-20
共1条回复

快乐动起来呀

2019-07-30

嗯,思路不错,棒棒哒

0
0

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程