组合,排列与递归

组合,排列与递归
package  com.heyang;

/** */ /**
 * 诸葛亮要派出五虎上将中的三员执行任务,请列出所有可能的组合
 * 
@author 何杨([email protected]
 *
 * 
@since 2009-2-11 上午08:29:25
 * 
@version 1.00
 
*/

public   class  Combiner  {
    
static char[] arr={'','','','',''};

    
public static void main(String[] args) {
        
int[] arr = new int[3];
        combine(
53, arr);
    }


    
public static void combine(int total, int chooseCount, int selectedArr[]) {
        
for (int i = total; i >= chooseCount; i--){
            selectedArr[chooseCount 
- 1= i - 1;
            
            
if (chooseCount > 1){
                combine(i 
- 1, chooseCount - 1, selectedArr);
            }

            
else 
            
{
                
for (int j = selectedArr.length - 1; j >= 0; j--{
                    System.out.print(arr[selectedArr[j]] 
+ ",");
                }

                System.out.println();
            }

        }

    }

}


结果:
 1 黄,马,赵,
 2 黄,马,张,
 3 黄,马,关,
 4 黄,赵,张,
 5 黄,赵,关,
 6 黄,张,关,
 7 马,赵,张,
 8 马,赵,关,
 9 马,张,关,
10 赵,张,关,

排列代码:
package  com.heyang;

/** */ /**
 * 全排列代码
 * 赵钱孙李四人排队,求所有排队方案
 * 
 * 
@author 何杨([email protected]
 *
 * 
@since 2009-2-11 下午01:26:45
 * 
@version 1.00
 
*/

public   class  Permutation {
    
public static void main(String[] args){
        Character[] arr
={'','','',''};
        permutation(arr,
0,arr.length);
    }

    
    
public static void permutation(Object[] arr,int start,int end){
        
if(start<end+1){
            permutation(arr,start
+1,end);
            
            
for(int i=start+1;i<end;i++){
                Object temp;
                
                temp
=arr[start];
                arr[start]
=arr[i];
                arr[i]
=temp;
                
                permutation(arr,start
+1,end);
                
                temp
=arr[i];
                arr[i]
=arr[start];
                arr[start]
=temp;
            }

        }

        
else{
            
for(int i=0;i<end;i++){
                System.out.print(arr[i]);
            }

            System.out.print(
"\n");
        }

    }

}


排列结果:
 1 赵钱孙李
 2 赵钱李孙
 3 赵孙钱李
 4 赵孙李钱
 5 赵李孙钱
 6 赵李钱孙
 7 钱赵孙李
 8 钱赵李孙
 9 钱孙赵李
10 钱孙李赵
11 钱李孙赵
12 钱李赵孙
13 孙钱赵李
14 孙钱李赵
15 孙赵钱李
16 孙赵李钱
17 孙李赵钱
18 孙李钱赵
19 李钱孙赵
20 李钱赵孙
21 李孙钱赵
22 李孙赵钱
23 李赵孙钱
24 李赵钱孙

你可能感兴趣的:(组合,排列与递归)