[JavaScript 刷题] 搜索 - 复原 IP 地址, leetcode 93
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 搜索 - 复原 IP 地址, leetcode 93相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 搜索 - 复原 IP 地址, leetcode 93
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目
如下:
A valid IP address consists of exactly four integers separated by single dots. Each integer is between
0
and255
(inclusive) and cannot have leading zeros.
- For example,
"0.1.2.201"
and"192.168.1.1"
are valid IP addresses, but"0.011.255.245"
,"192.168.1.312"
and"192.168@1.1"
are invalid IP addresses.Given a string
s
containing only digits, return all possible valid IP addresses that can be formed by inserting dots intos
. You are not allowed to reorder or remove any digits ins
. You may return the valid IP addresses in any order.
解题思路
其实这道题就和 电话号码的字母组合 很像了,当然,这里的边界条件比起 电话号码的字母组合 要稍微多一些。
-
必须使用整个字符串
以
"25525511135"
为例,最初的几个遍历路线肯定是:注意这种路线:
虽然这些 IP 地址合法,但是不符合题意——题目中的需求要求必须使用全部的字符串,所以这些 IP 地址就违反了边界条件,也就不能被归入合法的 IP 地址中。
-
特殊值 0
第二种边界条件就是每个 IP 包含的数字可以有 0,但是不能有 0 开头的,如
0.0.0.0
是一个合法的 IP 地址,但是0.00.0.0
就不可以。 -
数字上限 255
第三个边界条件为每个 IP 地址包含的数字上限为 255,取值范围是:
[0, ..., 255]
,超过这个上限,如 256,也无法组成一个合法的 IP 地址。
本质上来说还是需要查遍所有的路径,这里需要几个额外的变量保存:
- 当前的字符串
- 已经添加多少个数字到 IP 中
一旦保存了这两个变量,那么用 DFS 去遍历所有的可能路径即可。
使用 JavaScript 解题
这道题解法不是我写出来的,而是在看别的大神写的时候看到的,原解法地址如下:JavaScript The Most Clean Backtracking Solution,真的很优雅。
/**
* @param string s
* @return string[]
*/
var restoreIpAddresses = function (s)
if (!s || s.length < 4 || s.length > 12) return [];
const res = [];
const isValidDigit = (str) =>
if (+str > 255 || str.length === 0) return false;
if (str.length > 1 && str[0] === "0") return false;
return true;
;
const dfs = (arr, str) =>
if (arr.length === 3)
if (isValidDigit(str)) res.push([...arr, str]);
return;
for (let i = 0; i < 4; i++)
const currIP = str.slice(0, i);
if (!isValidDigit(currIP)) continue;
dfs([...arr, currIP], str.slice(i));
;
dfs([], s);
return res.map((ip) => ip.join("."));
;
解题思路中的图就是根据这个解法来的,充分利用 IP 地址的长度只能为 4 和传进来的值中只能包含数字的特性去解这道题。
以上是关于[JavaScript 刷题] 搜索 - 复原 IP 地址, leetcode 93的主要内容,如果未能解决你的问题,请参考以下文章