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
  • 相关阅读:
    球员岁月齐祖辉煌,执教生涯尤胜当年
    UVM序列篇之一:新手上路
    *2-3-7-加入field_automation机制
    2.3.6-加入scoreboard
    *2_3_5_加入reference model
    *2.3.4_封装成agent
    *2.3.3-加入monitor
    android的wake_lock介绍
    linux常用命令一些解释
    linux wc命令的作用。
  • 原文地址:https://www.cnblogs.com/7749ha/p/9165401.html
Copyright © 2011-2022 走看看