全屋定制设计网站推荐,网站服务器拒绝连接,继续访问浏览器,创立一个品牌要多少钱93. 复原 IP 地址
已解答 中等 相关标签 相关企业 有效 IP 地址 正好由四个整数#xff08;每个整数位于 0 到 255 之间组成#xff0c;且不能含有前导 0#xff09;#xff0c;整数之间用 ‘.’ 分隔。
例如#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地…93. 复原 IP 地址
已解答 中等 相关标签 相关企业 有效 IP 地址 正好由四个整数每个整数位于 0 到 255 之间组成且不能含有前导 0整数之间用 ‘.’ 分隔。
例如“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址但是 “0.011.255.245”、“192.168.1.312” 和 “192.1681.1” 是 无效 IP 地址。 给定一个只包含数字的字符串 s 用以表示一个 IP 地址返回所有可能的有效 IP 地址这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
示例 1 输入s “25525511135” 输出[“255.255.11.135”,“255.255.111.35”] 示例 2 输入s “0000” 输出[“0.0.0.0”] 示例 3 输入s “101023” 输出[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]
提示
1 s.length 20s 仅由数字组成
代码
func restoreIpAddresses(s string) []string {res : make([]string, 0)dfs_rIA(s, 0, 0, , res)return res
}func dfs_rIA(s string, index int, pointNum int, s2 string, res *[]string) {if pointNum 3 {if len(s[index:]) ! 0 judeg_rIA(s[index:]) {s2 s2 . s[index:]*res append(*res, s2[1:])}return}for i : index; i len(s); i {if judeg_rIA(s[index : i1]) {tmp : s2s2 s2 . s[index:i1]dfs_rIA(s, i1, pointNum1, s2, res)s2 tmp} else {continue}}return
}func judeg_rIA(s string) bool {if len(s) 1 s[0] 0 {return false}x, _ : strconv.Atoi(s)if x 0 x 255 {return true}return false
}78. 子集
中等 相关标签 相关企业 给你一个整数数组 nums 数组中的元素 互不相同 。返回该数组所有可能的子集幂集。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1 输入nums [1,2,3] 输出[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2 输入nums [0] 输出[[],[0]]
提示
1 nums.length 10-10 nums[i] 10nums 中的所有元素 互不相同
思路
求子集问题和77.组合 (opens new window)和131.分割回文串 (opens new window)又不一样了。 如果把 子集问题、组合问题、分割问题都抽象为一棵树的话那么组合问题和分割问题都是收集树的叶子节点而子集问题是找树的所有节点 其实子集也是一种组合问题因为它的集合是无序的子集{1,2} 和 子集{2,1}是一样的。
代码
func subsets(nums []int) [][]int {res : make([][]int, 0)dfs_s(nums, 0, []int{}, res)return res
}func dfs_s(nums []int, index int, path []int, res *[][]int) {tmp : make([]int, len(path))copy(tmp, path)*res append(*res, tmp)if index len(nums) {return}for i : index; i len(nums); i {path append(path, nums[i])dfs_s(nums, i1, path, res)path path[:len(path)-1]}return
}90. 子集 II
已解答 中等 相关标签 相关企业 给你一个整数数组 nums 其中可能包含重复元素请你返回该数组所有可能的子集幂集。 解集 不能 包含重复的子集。返回的解集中子集可以按 任意顺序 排列。
示例 1 输入nums [1,2,2] 输出[[],[1],[1,2],[1,2,2],[2],[2,2]] 示例 2 输入nums [0] 输出[[],[0]]
提示
1 nums.length 10-10 nums[i] 10
代码
func subsetsWithDup(nums []int) [][]int {res : make([][]int, 0)sort.Ints(nums)dfs_sWD(nums, 0, []int{}, res)return res
}func dfs_sWD(nums []int, index int, path []int, res *[][]int) {tmp : make([]int, len(path))copy(tmp, path)*res append(*res, tmp)if index len(nums) {return}for i : index; i len(nums); i {if i ! index nums[i-1] nums[i] {//去重continue}path append(path, nums[i])dfs_sWD(nums, i1, path, res)path path[:len(path)-1]}return
}