完美项链算法题-Python解法

完美项链的算法

题目:

完美项链:
小华有N种不同颜色的珠子,每种珠子有一定的数量,他想用这些珠子做项链。
其中没串项链需要M个珠子,且要求每串项链中不能有颜色相同的珠子
请问小华最多能做多少串项链。

例1:
N=4,结合一定数量珠子为{“1”:6,“2”:9,“3”:7,“4”:4},此时珠子总数量为26
M=3
那么输出有
[
(‘2’, ‘3’, ‘1’)
(‘2’, ‘3’, ‘1’)
(‘2’, ‘3’, ‘1’)
(‘2’, ‘3’, ‘4’)
(‘2’, ‘1’, ‘3’)
(‘2’, ‘4’, ‘1’)
(‘2’, ‘3’, ‘4’)
(‘2’, ‘1’, ‘3’)
]
共8条链子,最后剩余珠子为{‘1’: 0, ‘2’: 1, ‘3’: 0, ‘4’: 1}

解题思路:

目前我想到的解题思路是使用递归:
递归算法的三部曲:

  1. 递归函数参数定义和返回值
  2. 确定递归终止条件
  3. 递归单次的逻辑

根据上述方式,解读题目后:
递归函数的参数定义返回值:参数为组成链子的珠子数目M,全局变量(非递归内)变量count记录链子数,全局变量字典dict_temp记录当前剩余珠子的状态
确定递归终止条件:单个珠子数量大于0的种数<组成链子珠子数目M
单次递归的逻辑:从珠子数量最大的三个中选取珠子,然后项链数+1,被选中的珠子的数量-1, 继续递归

最后直接上代码:

from copy import deepcopy
def func(dict1,N,M):
    """
    解题思路:
    使用递归函数
    递归函数的参数定义返回值:参数为组成链子的珠子数目M,全局变量(非递归内)变量count记录链子数,全局变量字典dict_temp记录当前剩余珠子的状态
    确定递归终止条件:单个珠子数量大于0的种数<组成链子珠子数目M
    单
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值