>  기사  >  백엔드 개발  >  길이 n의 숫자에서 임의의 m 숫자의 조합 찾기

길이 n의 숫자에서 임의의 m 숫자의 조합 찾기

巴扎黑
巴扎黑원래의
2016-12-20 14:15:251594검색

문제는 다음과 같이 분해될 수 있습니다.
1. 먼저 n개의 숫자 중 가장 큰 숫자를 선택한 다음, 나머지 n-1개의 숫자 중에서 m-1개의 숫자를 선택하여 n-(m- 1)개를 선택합니다. 숫자에서 1개의 숫자입니다.
2. n개의 숫자 중에서 다음으로 가장 작은 숫자를 선택하고 현재 선택할 수 있는 최대 숫자가 m이 될 때까지 1단계를 계속합니다.
분명히 위의 방법은 재귀적 프로세스이므로 재귀적 방법을 사용하면 모든 조합을 매우 깔끔하게 얻을 수 있습니다.

코드:

package algorithm.ms100;
public class CtzHe {
private int[] array = {1,2,3,4,5};
private int[] b= new int[3];
private int M = 3;
public void combine( int a[], int n, int m)
{ 
for(int i=n; i>=m; i--)   // 注意这里的循环范围
{
 b[m-1] = i - 1;
 if (m > 1)
 combine(a,i-1,m-1);
 else                     // m == 1, 输出一个组合
 {   
 for(int j=M-1; j>=0; j--)
 System.out.print( a[b[j]] + " ");
 System.out.println();
 }
}
}
public static void main(String[] args) {
CtzHe c = new CtzHe();
c.combine(c.array, 5, 3);
}
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.