> 文章列表 > 回溯算法题

回溯算法题

回溯算法题

回溯的for循环梯次

同一个梯次的for循环的结果表示在本梯次的不同结果

1,字符串切割为回文子串----131

最重要的两个使用参数:

(1)起始下标(2)切割长度

切得回文子串---保存,下一个

切得的子串不是回文串:

(1)抛弃最后的字符,保存前面的----不可,前面的已经处理过了,只能往后切割。

(2)增加切割长度往后切割。

同一级的子串分割是从短到长的,所以只能增不能减。

同一级别子串需要重新分割时,就需要从数组中清楚,重新装填。

全排列1(没有重复数据)-----46

全排列同一梯次取值是所有值,通过find排除

全排列2(有重复数据)-----47

这个题需要解决两个问题:

1,标记某一个元素在本路径已经访问过;

2,防止重复路径:

重复路径是怎么出现的---同一梯次使用相同元素

if(i>0&&nums[i]==nums[i-1]&&!visited[i-1]) continue;

11----11 11

相同元素在相同梯次会形成相同路径

所以这个题排列之前先排序

组合(返回范围 [1, n] 中所有可能的 k 个数的组合)-----77

不需要考虑下标i的范围,i>n  ,for循环自动退出。

组合同一梯次取值需要往后取

同一梯次取所有值和往后取理由就是,12,21是不是组合还是排列。

组合总和1(元素可以重复使用)-----39

只管不断加,大于退出就行

组合总和2(元素不可以重复使用而且有重复元素,结果不能有重复组合)-----40

 结果不能有重复组合-----同一梯次的相同元素不再使用就可以保证不会出现重复组合。

if(i>startIndex&&nums[i]==nums[i-1]) continue;

无论是全排列2还是组合总和2下标都要大于本梯次的起始下标

都要先排序

全排列和组合总和两两对称

路径总和1-----112

路径总和2-----113

路径总和和链表反转都是5行代码实现。

子集1-----78

子集2-----90

同一梯次不能使用相同元素

全排列,组合,子集两两对称

股票信息