问题描述
求解1到n连续数列, (例如[1, 2, 3……n])数列内,加和等于m的组合
解题思路
使用二进制代表每个数字的选取,在此基础上进行加和验证
代码与结果
代码
def get_list(max_num=100):
# 生成两个序列
array_list = [int(0) for _ in range(max_num)]
num_list = [int(i) for i in range(1, max_num + 1)]
return array_list, num_list
def add_one_num(array_list):
# 实现2进制加法
if 2 in array_list:
cursor = array_list.index(2)
array_list[cursor] = 0
array_list[cursor + 1] += 1
add_one_num(array_list)
return array_list
if __name__ == '__main__':
# target_length:数列长度
# target_sum:目标加合
target_length = 100
target_sum = 99
array_list, num_list = get_list(target_length)
while True:
if sum(array_list) == len(array_list):
break
array_list[0] += 1
array_list = add_one_num(array_list)
num_sum = 0
feasible_list = []
for item in zip(array_list, num_list):
num_sum = num_sum + item[0] * item[1]
if item[0] != 0:
feasible_list.append(item[1])
if num_sum == target_sum:
print(feasible_list, num_sum)