网站名字词,wordpress和ss一起,湘潭网站建设 沟通磐石网络,一千元做网站JAVA代码编写
93 .复原IP地址
有效 IP 地址 正好由四个整数#xff08;每个整数位于 0 到 255 之间组成#xff0c;且不能含有前导 0#xff09;#xff0c;整数之间用 . 分隔。
例如#xff1a;0.1.2.201 和 192.168.1.1 是 有效 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 仅由数字组成
教程https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html
方法一回溯
思路 class Solution {ListString result new ArrayListString();StringBuilder stringBuilder new StringBuilder();public ListString restoreIpAddresses(String s) {restoreIpAddressesHandler(s, 0, 0);return result;}// number表示stringbuilder中ip段的数量public void restoreIpAddressesHandler(String s, int start, int number) {// 如果start等于s的长度并且ip段的数量是4则加入结果集并返回if (start s.length() number 4) {result.add(stringBuilder.toString());return;}// 如果start等于s的长度但是ip段的数量不为4或者ip段的数量为4但是start小于s的长度则直接返回if (start s.length() || number 4) {return;}// 剪枝ip段的长度最大是3并且ip段处于[0,255]for (int i start; i s.length() i - start 3 Integer.parseInt(s.substring(start, i 1)) 0 Integer.parseInt(s.substring(start, i 1)) 255; i) {// 如果ip段的长度大于1并且第一位为0的话continueif (i 1 - start 1 s.charAt(start) - 0 0) {continue;}stringBuilder.append(s.substring(start, i 1));// 当stringBuilder里的网段数量小于3时才会加点如果等于3说明已经有3段了最后一段不需要再加点if (number 3) {stringBuilder.append(.);}number;restoreIpAddressesHandler(s, i 1, number);number--;// 删除当前stringBuilder最后一个网段注意考虑点的数量的问题stringBuilder.delete(start number, i number 2);}}
}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 中的所有元素 互不相同
教程https://programmercarl.com/0078.%E5%AD%90%E9%9B%86.html
方法一回溯
思路 class Solution {ListListInteger result new ArrayList();// 存放符合条件结果的集合LinkedListInteger path new LinkedList();// 用来存放符合条件结果public ListListInteger subsets(int[] nums) {subsetsHelper(nums, 0);return result;}private void subsetsHelper(int[] nums, int startIndex){result.add(new ArrayList(path));//「遍历这个树的时候把所有节点都记录下来就是要求的子集集合」。if (startIndex nums.length){ //终止条件可不加return;}for (int i startIndex; i nums.length; i){path.add(nums[i]);subsetsHelper(nums, i 1);path.removeLast();}}
}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
教程https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html
方法一回溯
思路 class Solution {ListListInteger result new ArrayList();// 存放符合条件结果的集合LinkedListInteger path new LinkedList();// 用来存放符合条件结果boolean[] used;public ListListInteger subsetsWithDup(int[] nums) {if (nums.length 0){result.add(path);return result;}Arrays.sort(nums);used new boolean[nums.length];subsetsWithDupHelper(nums, 0);return result;}private void subsetsWithDupHelper(int[] nums, int startIndex){result.add(new ArrayList(path));if (startIndex nums.length){return;}for (int i startIndex; i nums.length; i){if (i 0 nums[i] nums[i - 1] !used[i - 1]){continue;}path.add(nums[i]);used[i] true;subsetsWithDupHelper(nums, i 1);path.removeLast();used[i] false;}}
}