在数组中寻找对应和
Posted AcodingDog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在数组中寻找对应和相关的知识,希望对你有一定的参考价值。
Input:长度为n的数组作为查找对象,一个数字作为要查找的标准
Output: 挑选出数组中满足和为该数字的子数组
思路:
试想,若有一数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]找到和为6的子数组。结果应该为[1,2,3], [1,5], [2,4], [6]。
当挑选出一个数字 i 后,继续查找的和是6 - i,数组去掉一个 i 元素。
同时,保持要查找的和不变,查找的子数组中不带有 i 元素的子数组
def find_numbers(desired_sum, list_of_nb): ‘‘‘ >>> find_numbers(6, [1,2,3,4,5,6]) [[6], [4, 2], [5, 1], [3, 2, 1]] ‘‘‘ return _find_numbers(desired_sum, list_of_nb) def _find_numbers(desired_sum, list_of_nb): if desired_sum < 0: return if not list_of_nb: if desired_sum == 0: return [[]] return L1 = _find_numbers(desired_sum, list_of_nb[1:]) L2 = _find_numbers(desired_sum - list_of_nb[0], list_of_nb[1:]) if not L2: return L1 L2 = [R + [list_of_nb[0]] for R in L2] if L1: return L1 + L2 else: return L2
具体代码如上
使用递归的思想,base case是当desired_sum小于0时,返回一个空值,因为这种情况是错误的
当列表为空时,说明已经查找到最后,在此时,如果要求的和也为0,说明查找结束,返回一个列表的列表
否则,说明查找失败,返回一个空值
L1和L2分别对应两种情况,也即是得到没有list_of_nb[0]的结果和有list_of_nb[0]的结果
如果L2为一个空值,说明没有这种结果,那么返回另一种情况
否则要加上当前减去的那个值
如果L1是空值,那么只有L2存在,返回L2
否则把L1的情况加入到L2中
以上是关于在数组中寻找对应和的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS Word 文档中显示代码片段,因为它在 *** 中显示(滚动条和灰色背景)
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”