【 알고리즘 】 재 귀적 DFS (깊이 검색)
17831 단어 필기시험
예 를 들 어 1, 2, 3, 4, 5 중에서 3 개 수 를 선택 하면 도대체 몇 가지 조합 이 있 습 니까?해결 방안: 먼저 하나의 수 를 선택 한 다음 에 나머지 4 개의 수 중에서 2 개의 수 를 선택 한 다음 에 나머지 3 개의 수 중에서 1 개의 수 를 선택한다.0 개 수 를 선택 하여 재 귀 할 때 까지...그리고 밖 에 순환 을 하면 배열 1, 2, 3, 4, 5 의 모든 가능 한 조합 방식 을 얻 을 수 있다.참조 링크
public class test1 {
public static void digui(int [] nums) {
for(int i = 1; i <= nums.length; i++) {
int out[] = new int[i];
helper(nums, nums.length, i, out, i);
}
}
public static void helper(int[] input, int inputlen, int m, int [] out, int outlen) {
// : input inputLen m , out
//@input , {0,1,2,3,4},
//@inputLen input inputLen , inputLen=3, input {0,1,2}
//@m m , m=2,inputLen=3, :{0,1}{0,2}{1,2}
//@out 。 ,m=3, out {1,2,3}{1,2,4}
//@outLen out
//
if (m == 0) {
for(int i = 0; i < outlen; i++) {
System.out.print(out[i]);
System.out.print("->");
}
System.out.println();
return;
}
// inputlen---->m
// m , i (inputlen, i ) >=m
for(int i = inputlen; i >= m; i--) {
//
out[m-1] = input[i-1];
// , inputlen m
helper(input, i - 1, m - 1, out, outlen);
}
}
public static void main(String[] args) {
int[] nums = new int[5];
for(int i = 0; i < nums.length; i++) {
nums[i] = i + 1;
}
digui(nums);
}
}
:
5->
4->
3->
2->
1->
4->5->
3->5->
2->5->
1->5->
3->4->
2->4->
1->4->
2->3->
1->3->
1->2->
3->4->5->
2->4->5->
1->4->5->
2->3->5->
1->3->5->
1->2->5->
2->3->4->
1->3->4->
1->2->4->
1->2->3->
2->3->4->5->
1->3->4->5->
1->2->4->5->
1->2->3->5->
1->2->3->4->
1->2->3->4->5->
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾다제목: 두 갈래 나무 중 두 노드의 가장 가까운 공공 조상을 찾아 되돌려 달라고 한다. 알고리즘 사상: 이 문제의 관건은 모든 노드에 부모 노드를 가리키는 바늘을 포함하는 데 있다. 이로써 프로그램은 간단한 알고리즘...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.