LeeCode打卡第三十天
LeeCode打卡第三十天
第一题:组合(LeeCode第77题):
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
主要思想:用递归做题首先得确定边界,这道题的边界为存入的数列的长度要小于等于k
class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return result;}public void backtracking(int n, int k, int startIndex){if(path.size() == k){result.add(new ArrayList<>(path));return;}for(int i = startIndex; i <= n; i++){path.add(i);backtracking(n, k, i +1);path.removeLast();}}
}
第二题:数组综合III(LeeCode第216题):
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
主要思想:用递归的思想,和上一题解法类似,修改一下判定条件即可实现功能
class Solution {List<List<Integer>> ans = new ArrayList<>();List<Integer> res = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(n, k, 1);return ans;}public void backtracking(int n, int k, int startIndex){int sum = 0;for(int num : res){sum += num;}if(res.size() == k && sum == n){ans.add(new ArrayList<>(res));return;}for(int i = startIndex; i <= 9; i++){res.add(i);backtracking(n, k, i + 1);res.removeLast();}}
}
第三题:存在重复元素(LeeCode第217题):
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
主要思想:主要采用hashset,将数组中的元素存入hashset利用hashset的contains函数判断是否包含
class Solution {public boolean containsDuplicate(int[] nums) {HashSet<Integer> set = new HashSet<>();for(int n : nums){if(set.contains(n)) return true;set.add(n);}return false;}
}