算法巩固--回溯法
回溯法是一种探索所有存在可能性,并找到解决方法的算法。一般来说,回溯法在每一步会确定解决方案中的一个值,然后继续寻找下一个解决方案。如果当前方案不是正确的方案,或不是最后一个正确的解决方案,则会通过修改上一步的值,继续寻找正确的方案。
做题时,若题目有关键词“所有的”出现,则要想到用回溯法来解决。
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给你一个整数数组 nums ,数组中的元素互不相同 。返回该数组所有可能的子集(幂集)。
做题时,如何判重是一个头疼的问题。有重复元素的题,建议在纸上把递归树画出来,找寻解决方案。注意在画的时候严格按照你写的函数的代码顺序画。
一般去重的方法:
对给定集合元素排序后,重合的元素会挨在一起,这样在递归里会很方便的找到重复的元素,即让集合的下标加1或减1等等······
if( i > 0 && !flag[i - 1] == 0 && nums[i] == nums[i - 1]){ continue; }
至于为什么要判断flag[i - 1],为了避免排除掉唯一一个两数都在一起的正确情况。

浙公网安备 33010602011771号