思路

  • 长度为12位:最小单元位3
  • 长度为11位:最小单元位2
  • 其他情况的最小单元位有可能是1

ts代码

  1. function restoreIpAddresses(s: string): string[] {
  2. // 保存所有符合条件的IP地址
  3. let r: any[] = []
  4. // 分四步递归处理ip分段
  5. let search = (cur: any, sub: any) => {
  6. if (sub.length > 12) return
  7. // 边界条件
  8. if (cur.length === 4 && cur.join('') === s) {
  9. r.push(cur.join('.'))
  10. } else {
  11. // 正常的处理过程
  12. for (let i = 0, len = Math.min(3, sub.length), tmp; i < len; i++) {
  13. tmp = sub.substr(0, i + 1)
  14. if (tmp - 256 < 0) {
  15. // 转换下数据类型,如 01为1(LeetCode测试用例)
  16. search(cur.concat([tmp * 1]), sub.substr(i + 1))
  17. }
  18. }
  19. }
  20. }
  21. search([], s)
  22. return r
  23. }
  24. console.log(restoreIpAddresses('101023'))