Heim  >  Artikel  >  Backend-Entwicklung  >  Finden Sie die Kombination beliebiger m Zahlen in einer Zahl der Länge n

Finden Sie die Kombination beliebiger m Zahlen in einer Zahl der Länge n

巴扎黑
巴扎黑Original
2016-12-20 14:15:251594Durchsuche

Das Problem kann wie folgt zerlegt werden:
1 Wählen Sie zuerst die Zahl mit der größten Zahl aus n Zahlen aus und wählen Sie dann m-1 Zahlen aus den verbleibenden n-1 Zahlen aus, bis n-(m- 1) Wählen Sie aus 1 Nummer aus der Nummer.
2. Wählen Sie die nächstkleinere Zahl aus n Zahlen aus und fahren Sie mit Schritt 1 fort, bis die aktuell maximal auswählbare Zahl m ist.
Offensichtlich ist die obige Methode ein rekursiver Prozess, was bedeutet, dass alle Kombinationen mit der rekursiven Methode sehr sauber erhalten werden können. Code auf

:

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);
}
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn