码迷,mamicode.com
首页 > 编程语言 > 详细

python 给定数组任意组合等于一个定值的所有解

时间:2018-06-11 10:54:50      阅读:665      评论:0      收藏:0      [点我收藏+]

标签:问题分析   代码实现   pre   bsp   排列组合   一个   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 给定数组任意组合等于一个定值的所有解

标签:问题分析   代码实现   pre   bsp   排列组合   一个   python   方法   答案   

原文地址:https://www.cnblogs.com/7749ha/p/9165401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!