代码随想录算法训练营第二十九天| 491、46、47

491.递增子序列 

文档和视频讲解:代码随想录(programmercarl.com)

状态:未ac

用时:1h

思路:当路径size大于1就可以把当前路径放入结果中。用一个数组作为哈希表,来作为树层之间的去重。循环的时候如果路径不为空且路径最后的值大于当前值,或者当前数已经使用过了,都跳过。然后才进入递归和回溯。注意在此之前更改该值在哈希数组中的标识。

代码:

图1



46.全排列 

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1h

思路:第一个方法是通过与当前位置进行交换,递归后在交换回去就行了。在当前位置到达数组最后时,可以把数组放入结果中。

第二个是用一个数组表示path中收录了的数字。每次递归函数中,都从头开始循环。

代码:

图2 交换


图3 选取

47.全排列 II 

文档和视频讲解:代码随想录(programmercarl.com)

状态:未ac

用时:1h

思路:通过交换的方法需要一个set来存放树层已经选取过的数字,来避免树层的重复。

通过选取的方法,由于需要从头开始遍历,为了避免树层重复,除了需要和之前的数字比较是否相同,还需要保证前一个数在used数组中为false。如果i-1和i位置上两个数相同且used[i-1] = true,表示是树枝重复。

代码:

图4 交换


图5 选取
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容