LeetCode노트-77그룹
2305 단어 LeetCode 노트
두 개의 정수 n과 k를 주고 1을 되돌려줍니다.n의 모든 가능한 k 개의 조합.
예:
: n = 4, k = 2
:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
사고방식: 다음은 인터넷 대신의 코드, 원문 링크를 참고했다.https://blog.csdn.net/happyaaaaaaaaaaa/article/details/51564160
점차적으로 실현되는 문제로 깊이 있게 우선적으로 검색한다는 뜻이 있다.귀환의 반환 조건은 k==0입니다. 즉, 길이가 K인 조합을 찾아 결과 집합에 추가하고temp에서 삭제합니다.
코드:
class Solution { public List> combine(int n, int k) { List> res = new ArrayList>(); List temp = new ArrayList(); dfs(res, temp, n, k, 1); return res; } private void dfs(List>res, List temp, int n, int k, int m) {if(k==0) {//귀속 종료 조건res.add(new ArrayList(temp);return;} for(int i=m;i<=n;i++) {temp.add(i);/첫 번째 요소를temp dfs(res,temp,n,k-1,i+1)에 추가합니다;//귀속 호출, i+1부터temp.remove(temp.size()-1)-1을 반복하지 않기;/원래 저장된 조합을 꺼내서 다시 시작합니다}
} }
아래의 두 가지 사고방식은 일치하지만 판단 조건을 하나 더 추가했을 뿐이다.
가장 많은 코드를 제출합니다.
class Solution {
public List> combine(int n, int k) {
List> res = new ArrayList>();
if(k>n) return res;
List list = new ArrayList();
getPass(n, k, list, res, 1);
return res;
}
public void getPass(int n, int k, List list, List> res, int start){
if(list.size() == k){
res.add(new ArrayList(list));
return;
}
int len = list.size();
for(int i=start;i<=n;i++){
if(n-i
가장 빠른 코드 실행:
class Solution {
public List> combine(int n, int k) {
List> res = new ArrayList>();
if(k>n) return res;
List list = new ArrayList();
getPass(n, k, list, res, 1);
return res;
}
public void getPass(int n, int k, List list, List> res, int start){
if(list.size() == k){
res.add(new ArrayList(list));
return;
}
int len = list.size();
for(int i=start;i<=n;i++){
if(n-i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 노트-107 두 갈래 트리 레이아웃 II두 갈래 나무를 정해서 노드 값이 밑에서 위로 올라가는 차원을 되돌려줍니다.(즉, 잎 노드가 있는 층에서 뿌리 노드가 있는 층으로 한 층씩 왼쪽에서 오른쪽으로 옮겨간다) 사고방식 1: 전체적인 사고방식은 나무의 모든...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.