JavaScript 数据结构与算法

JavaScript 递归(复原 IP 地址)

2020-05-06  本文已影响0人  阿畅_

题目:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses

思路
function restoreIpAddresses(str) {
  // 当前这里可以加一个判断 字符串的条件,字符串长度必须大于等于 4
  // 保存所有符合条件的 IP 地址
  let s = []
  let search = (cur, sub) => {
    // 递归的边界条件,数组长度等于 4 且组合起来与之前的字符串相等
    if (cur.length === 4 && cur.join('') === str) {
      s.push(cur.join('.'))
    } else {
      // 处理正常过程
      // 每次最多循环三次
      let len = Math.min(3, sub.length)
      for (let i = 0; i < len; i++) {
        // 截取字符串 1 ~ 3
        let tmp = sub.substr(0, i + 1)
        // 如果当前的数小于 256 说明在 255 范围内,接着递归调用(把不是范围内的排出掉)
        // 例如 255255255, 截取第一次 2,第二次递归截取时 for循环第三次是 522 不在范围内
        if(tmp < 256) {
          search(cur.concat([tmp]), sub.substr(i + 1))
        }
      }
    }
  }
  search([], str)
  return s
}
console.log(restoreIpAddresses('123123'))
["1.2.3.123", "1.2.31.23", "1.23.1.23", "1.23.12.3", "1.231.2.3", "12.3.1.23", "12.3.12.3", "12.31.2.3", "123.1.2.3"]
上一篇 下一篇

猜你喜欢

热点阅读