这篇文章将会比较两种常见的回溯体型,一种是全排列问题,一种是求子集的问题,两者都是利用回溯解法,但是两者的for循环选取下一个可选值时的起始坐标是不同的,先上部分代码我们来比较以下
1 | //子集求法 |


我们观察两者的区别,发现前者的代码for循环是从startIndex开始的,而后者的代码for循环总是从0开始的,这是为什么呢?
因为全排列是有顺序的1,2和2,1是不同的,而对于集合来说1,2和2,1是相同的,所以在变量集合的过程中,我们不能回头,否则会产生重复,正是因为子集求法没有回头,所以我们不需要创建used数组来判断数字是否使用过,仔细品味上述的图片和代码就会明白其中的道理!!