2021/08/30 - 39. 组合总和
程序设计类问题一共大致分为两类题目,一类是需要手工计算的,这类问题需要前期的数学论证,用数学的方式寻求问题的解,代码仅仅是作为数值运算的工具。
第二类是需要计算机判断的,这类问题能够找到一个统一的、计算机可以解决的问题。人们不用动脑子,仅仅把问题转化成计算机框架的输入格式,交给计算机去完成就行了。今天涉及到的回溯算法就是这么个例子。
回溯算法
回溯算法,首先确定问题的解空间,按照一定的顺序(宏观的看待,是一棵将被剪枝的树),遍历其解空间,得到结果集。
针对这个问题,遍历解空间的方式为对索引遍历,取用不用,分为两种情况,又能重复取数,则是一个重叠形式(重叠形式指树和子树相似,相似指有属性相同,此处为当前的索引数)的二叉树。