技巧

https://leetcode.cn/problems/next-permutation/description/?envType=problem-list-v2&envId=array

【Leetcode 31 下一个排列 【其实不难,就是要找深度优先的规律】】 https://www.bilibili.com/video/BV1Rz4y1Z7hx/?share_source=copy_web&vd_source=c82d7348ff4044c713e57e0029548cbd

这个视频可以,感觉讲的清楚,序列可以画成一棵树,一个序列就是这颗树到底的路径

先看下一个的规律,就是深度优先,就是回溯下一个,因为一个序列就是一个到底的路径,所以下一步操作一定是回溯 (如果是继续深搜那说明序列没走全呢)

既然回溯了,那一定处在某子树的最右边,这个最右边有这样的性质:降序

然后从某子树的最右边回溯回去走另一条分支 (也就是新树) 一定走的是新树的最左边,这个最左边有这样的性质:升序

所以只要找到降序的部份,分割开,回溯点的下一个交换再升序就可以了。这个回溯点下一个其实就是要比这个回溯点大但前面没选过 (有图画树了的话很明显,就是后面的部份里找)

关于特判

比如 115 如果严格按照那么画,会发现有重复的树,猜测是不需要重复的数的,也就是说,