Leetcode - Subset
3341 단어 LeetCode
사고방식1: 각 층마다 원소를 새로 추가하고 첫 번째 층은 원소를 추가하며 결과에 공집을 넣은 다음에 서로 다른 첫 번째 원소를 순환적으로 추가하고 아래로 귀속한다.2층 귀속, 입력 매개 변수에 하나의 원소를 포함하는 서브집합을 결과를 추가한 다음에 서로 다른 두 번째 원소를 순환적으로 추가하고 아래로 귀속...n+1층은 n개의 원소를 포함하는 전체 집합 귀속 결과를 포함한다.
사고방식 2와 사고방식 3은 코드깡커 블로그를 참고하는데 각각 귀속과 교체의 사고방식으로 개인적으로 교체가 더 잘 이해된다고 생각한다.
[ref]
subset: http://blog.csdn.net/linhuanmars/article/details/24286377
public class Solution {
// Method 1
public List<List<Integer>> subsets1(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (nums == null || nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
Arrays.sort(nums);
recur(nums, 0, new ArrayList<Integer>(nums.length), result);
return result;
}
public void recur(int[] nums, int start, List<Integer> subset, List<List<Integer>> result) {
result.add(new ArrayList<Integer>(subset));
for (int i = start; i < nums.length; i++) {
subset.add(nums[i]);
recur(nums, i + 1, subset, result);
subset.remove(subset.size() - 1);
}
}
// Method 2
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (nums == null || nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
Arrays.sort(nums);
return recur(nums, nums.length - 1);
}
public List<List<Integer>> recur(int[] nums, int idx) {
if (idx < 0) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
result.add(new ArrayList<Integer>());
return result;
}
List<List<Integer>> result = recur(nums, idx - 1);
int size = result.size();
for (int i = 0; i < size; i++) {
List<Integer> newSubset = new ArrayList<Integer>(result.get(i));
newSubset.add(nums[idx]);
result.add(newSubset);
}
return result;
}
// Method 3
public List<List<Integer>> subsets3(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
result.add(new ArrayList<Integer>());
if (nums == null || nums.length == 0) {
return result;
}
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
int size = result.size();
for (int j = 0; j < size; j++) {
List<Integer> newSubset = new ArrayList<Integer>(result.get(j));
newSubset.add(nums[i]);
result.add(newSubset);
}
}
return result;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.