题目
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
示例
输入:s = "25525511135" 输出:["255.255.11.135","255.255.111.35"]
思路
作者:oppeuro
链接:https://leetcode-cn.com/problems/restore-ip-addresses/solution/js-bao-gai-han-shu-by-oppeuro/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
回溯算法就是一进一出,同时控制好递归出口条件,然后在进的时候通过条件判断进行剪枝。爆改了下原函数,省了一个辅助函数。
//strToNum > 255:数字大小不能大于255 //str != strToNum + '':巧妙除去以零开头的大于两位数的值,比如010,011 //substring() 方法返回的子串包括开始处的字符,但不结束处的字符。
答案
作者:oppeuro
链接:https://leetcode-cn.com/problems/restore-ip-addresses/solution/js-bao-gai-han-shu-by-oppeuro/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
/**
* @param {string} s
* @return {string[]}
*/
var restoreIpAddresses = function(s, res = [], arr = [], start = 0) {
if(s.length > 12 || s.length < 4) return res;
if(arr.length == 4 && start == s.length) res.push(arr.join('.'));
for(let i = start; i < s.length; i++){
let str = s.substring(start, i + 1), strToNum = str - 0;
if(strToNum > 255 || str != strToNum + '') break;
arr.push(str);
restoreIpAddresses(s, res, arr, i + 1);
arr.pop();
}
return res;
}
语言:JavaScript
执行用时:92 ms, 在所有 JavaScript 提交中击败了11.23%的用户
内存消耗:41.6 MB, 在所有 JavaScript 提交中击败了22.28%的用户