• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

求一个数组元素的所有排列组合

public int func(int[] array,int[][] result){
	//array为要组合的数组,size为长度,firstIndex为要放在所以组合最前面的元素,result保存所有组合,每一行为一个组合
	//所有递归的结果都保存在result中,并且最低层的组合结果保存在最后列
	//返回本次递归组合的个数
	int size = array.cols;
	if(size==0)//如果没有元素,不再向下递归
		return 0;
	int num = 0;//本层递归的总组合数
	int subnum = 0;//本层每个元素作为头元素,其他元素的组合个数(递归返回)
	for(int i=0;i<size;i++){
		int[] newArray = new int[size-1];
		for(int j=0,k=0;j<size;j++){//获取待排序子数组
			if(j!=i)
				newArray[k++]=array[j];
		}
			
		subnum=func(newArray,result);//递归,对后面的子数组组合,并返回以array[i]开头的组合数
		num+=subnum;
		//将组合好的所有新数组中的每个组合放在array[i]后面,构成本层的组合,保存到数组中
		int j = result.rows-subnum;//表示本次组合的结果从哪行开始插入,result.rows表示数组已有行数
		while(j<result.rows)
			result[j++][result.cols-size] = array[i];//将头元素加上
	}
	return num;
}


 

 

posted @ 2013-08-16 19:48  Class Xman  阅读(1295)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3