请教【组合,递归】


弱弱的问一个问题:
给定一些数组A,B,C,.....N
比如A=[1,2,8], B=[2,5,6,7],C=[3]....各个数组的长度不一致
怎么实现输出分别从每个数组取出一个数所有组合情况。比如153,173,........
   想用递归实现,但是递归实现的思路不清晰,请指教
#算法工程师#
全部评论
是这样吗? vector<vector<int>>res; vector<int>temp; void find_all(vector<vector<int>>num,int index){ if (index == num.size()) res.push_back(temp); else{ for (int i = 0; i < num[index].size(); i++){ temp.push_back(num[index][i]); find_all(num, index + 1); temp.pop_back(); } } } int main() { vector<vector<int>>num = { { 1, 2, 8 }, { 2, 5, 6, 7 }, { 3 } }; find_all(num, 0); return 0; }
点赞 回复 分享
发布于 2017-08-04 16:35
mark
点赞 回复 分享
发布于 2017-08-04 16:17
和求全排列的思路一致,只不过一个字符串变成了多个字符串
点赞 回复 分享
发布于 2017-08-04 16:43
刚接触python,用python实现了了一下Lando的方法 #输入字典dic={'A':[2,4,3],'B':[2.2,3.5,3.1,6.3],'C':[1,4.2],'D':[0.2,9,5],'E':[4.1,4.3],'F':[2.9]} index=['A','B','C','D','E','F'] #不同数组的全排列 def permutaion2(dic,result,ind):         if ind==len(dic):                 print(result)         else:                 for i in range(len(dic[index[ind]])):                         list=dic[index[ind]]                         result.append(list[i])                         permutaion2(dic,result,ind+1)                         result.pop()              #main srt=[] permutaion2(dic,srt,0)        
点赞 回复 分享
发布于 2017-08-04 16:58
function funcd($arr,$pre,&$result){ if($arr==null||$arr==[]){ $result[]=$pre; }else{ $arr1=array_shift($arr); foreach($arr1 as $value){ funcd($arr,$pre.$value,$result); } } } $arrn=[[1,7,9],[3,4,9,10]]; funcd($arrn,'',$results); print_r($results);
点赞 回复 分享
发布于 2017-08-04 17:28
画出搜索树就一目了然了,和全排列问题很相似,只不过每一层的备选节点不同,第一层为1 2 8第二层为2 5 6 7第三层为8。PS 其实循环更高解决为啥非要用递归呢
点赞 回复 分享
发布于 2017-08-05 09:16

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务