您的位置:首页 > 财经 > 金融 > 古风淡雅ppt模板免费_全国工程建设信息平台_seo工作职位_国家优化防控措施

古风淡雅ppt模板免费_全国工程建设信息平台_seo工作职位_国家优化防控措施

2024/11/18 20:27:34 来源:https://blog.csdn.net/weixin_43872997/article/details/143633715  浏览:    关键词:古风淡雅ppt模板免费_全国工程建设信息平台_seo工作职位_国家优化防控措施
古风淡雅ppt模板免费_全国工程建设信息平台_seo工作职位_国家优化防控措施

刷题记录

  • 93. 复原 IP 地址
  • 78. 子集
  • 90. 子集 II

93. 复原 IP 地址

leetcode题目地址

本题和131. 分割回文串思路相似,回溯法进行数字拼接,判断当前数字是否符合要求,若符合则递归寻找下一个字段,若不符合则继续向后拼接。

时间复杂度: O ( 3 4 ) O(3^4) O(34)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {private int curCnt = 0;private List<String> path = new LinkedList<>();private List<String> result = new ArrayList<>();public boolean isValid(StringBuilder sb){// 前导0if(sb.length() > 1 && sb.charAt(0)=='0') return false;int sum=0;for(int i=0; i<sb.length(); i++){sum = sum*10 + sb.charAt(i) - '0';}// 0-255if(sum>=0 && sum<=255) return true;return false;}public void backtracking(String s, int startIdx){if(path.size() == 4 && startIdx >= s.length()){ // StringBuilder res = new StringBuilder();for(String num : path){res.append(num).append('.');}res.deleteCharAt(res.length()-1);result.add(res.toString());return;}StringBuilder sb = new StringBuilder();for(int i=startIdx; i<s.length(); i++){sb.append(s.charAt(i));if(isValid(sb)){path.add(sb.toString());backtracking(s, i+1);path.removeLast();}}}public List<String> restoreIpAddresses(String s) {if(s.length() > 12) return this.result;backtracking(s, 0);return this.result;}
}

78. 子集

leetcode题目地址

经典回溯问题,只是每一步都要放入结果集。

时间复杂度: O ( n ∗ 2 n ) O(n*2^n) O(n2n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {public List<Integer> path = new LinkedList<>();public List<List<Integer>> result = new ArrayList<>();public void backtracking(int[] nums, int startIdx){result.add(new ArrayList<>(path));if(startIdx >= nums.length){return;}for(int i=startIdx; i<nums.length; i++){path.add(nums[i]);backtracking(nums, i+1);path.removeLast();}}public List<List<Integer>> subsets(int[] nums) {backtracking(nums, 0);return result;}
}

90. 子集 II

leetcode题目地址

本题和上题的思路相似,只是多了一个去重的步骤。题目要求不能包含重复的子集,也就是在当前层若有相同元素已经查找过了,则跳过当前元素。需要先对数组排序,这样相同元素就连在一起,每层只查找相同元素中的第一个元素,其他相同元素跳过。

时间复杂度: O ( n ∗ 2 n ) O(n*2^n) O(n2n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {private List<Integer> path = new LinkedList<>();private List<List<Integer>> result = new ArrayList<>();public void backtracking(int[] nums, int startIdx){result.add(new ArrayList<>(path));if(startIdx >= nums.length) {return;}for(int i=startIdx; i<nums.length; i++){// 去重if(i != startIdx && nums[i] == nums[i-1]) continue;path.add(nums[i]);backtracking(nums, i+1);path.removeLast();}}public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);backtracking(nums, 0);return result;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com