有一组数字[0,1,2,3,4,5,6,7,8,9],现给出一个数字,比如3,要求从该组数字中选出相加等于3的组合(相加的数字3个),如0+0+3=3,0+1+2,3个相加的数字不能相同(如1+1+1就不行),无顺序要求。大概函数是这样fun(数组,和值,3),得到的是组合的个数.参数3是相加的数字个数,这里规定是3,如0+0+3,这是3个数字
2 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
递归查找符合规则的元素集合:部分逻辑是建立在认为集合中所有元素都是正数的基础上(()=>{vararr=[0,1,2,3,4,5,6,7,8,9]console.log(calc(arr,3,3))//0,1,2console.log(calc(arr,3,1))//3functioncalc(arr,total,count,feed=[]){if(count===1){//checkreturnarr.includes(total)?feed.concat(total):null}elseif(count>1){//removebignumberarr=arr.filter(item=>item}elseif(count===0){//maybetoolarge returntotal===0?feed:null}elseif(total<0||count<0){//toolargereturnnull}for(let[index,item]ofObject.entries(arr)){letresult=calc([...arr.slice(0,index),...arr.slice(index+1)],total-item,count-1,feed.concat(item))if(result)returnresult}returnnull}})()
红糖糍粑
TA贡献1815条经验 获得超6个赞
请参考以下python代码实现#-*-coding:utf-8-*-"""author:李毅"""fromunittestimportTestCasedefpermutation(array,nsum):'''假设数组元素不重复。'''#排序(升序)sarray=sorted(array)#找出最大下标max_idx=len(sarray)fori,einenumerate(sarray):ife>nsum:max_idx=ibreak#穷举result=[]foriinrange(max_idx):forjinrange(i,max_idx):forkinrange(j,max_idx):ifi==jandj==k:continueifsarray[i]+sarray[j]+sarray[k]==nsum:result.append((sarray[i],sarray[j],sarray[k]))returnresultclassTest(TestCase):"""单元测试"""deftest_permutation(self):self.assertEqual(permutation(range(10),3),[(0,0,3),(0,1,2)])self.assertEqual(permutation(range(10),2),[(0,0,2),(0,1,1)])#边界值self.assertEqual(permutation(range(3),3),[(0,1,2)])self.assertEqual(permutation(range(1,4),4),[(1,1,2)])
添加回答
举报
0/150
提交
取消