zoukankan      html  css  js  c++  java
  • python 给定数组任意组合等于一个定值的所有解

    抛出问题:

      求给定数组任意组合等于一个定值的所有解 例如列表l = [1, 2, 3, 4, 5],求任意组合的结果为10的所有答案

    问题分析:

      实际就是列表的所有排列组合,然后算出每个排列组合的值,记录等于所求值的组合结果。

      代码实现就是先生成和 l 等长的全0列表,0表示,列表该位置数不取,1表示列表该位置数取,就这样一直递归,一直到全1

    # -*- coding:utf-8  -*-
    # 日期:2018/6/11 7:30
    # Author:小鼠标
    # 求给定数组任意组合等于一个定值的所有解
    list = [1, 2, 3, 4, 5]
    val = 10
    # 生成等长的全0列表
    x = [0 for i in range(0,len(list))]
    
    # 递归方法 x 记录列表取跟不取,i表示当前递归的位置,has表示当前所有取的值的和
    def get_val(x,i,has):
        if i > len(x) - 1:
            return
        if has + list[i] == val:
            #符合条件记录
            x[i] = 1
            print(x)
            x[i] = 0
        # 当前位置取 执行一次
        x[i] = 1
        get_val(x,i+1,has+list[i])
        # 当前位置不取 执行一次
        x[i] = 0
        get_val(x, i + 1, has)
    get_val(x,0,0)
    
    # ===========结果=========
    # [1, 1, 1, 1, 0]  》》》[1,2,3,4] 1+2+3+4=10
    # [1, 0, 0, 1, 1]  》》》[1,4,5] 1+4+5=10
    # [0, 1, 1, 0, 1]  》》》[2,3,5] 2+3+5=10
  • 相关阅读:
    关于Python中的yield
    Python的getattr(),setattr(),delattr(),hasattr()
    django Forgienkey字段 在前台用js做处理
    利用checkbox的到值,并且存到数据库修改的话要显示之前选择的
    关于django批量上传图片
    block extends include三者的差别跟用法
    全智能建造
    共享经济
    新工匠
    运营方案
  • 原文地址:https://www.cnblogs.com/7749ha/p/9165401.html
Copyright © 2011-2022 走看看