这道题有两点
1.去重
由于数组中存在重复的数字,需要去重,这也是个数层去重
可以使用unordered set的方法。这里不能使用排序后i 和 i-1比较方法
这是为了防止 4 7 6 7 这种的
2.上面情况的解决方法
这面这种情况在4 7结束后由于6小于7 所以就不往后看了
由于是全排列,所以停止条件就是当长度跟数组相同时就返回,这个时候才会收结果
用use[i] = true去避免当前重复被选择, 比如1 ,2 ,3结果选出来112这种的。
这个比起上面的区别是 这道题会有重复的数 但是得到的排列不能一样 有重复的数就要数层去重
再加上之前的避免自己被选到
1.要有这么一个map去记录出发的机场 到达机场 和 到达机场的次数
当次数大于0时候是说明 到达的机场还可以往外飞 等于0的时候就代表结束了 这样可以避免循环情况
2.返回条件是当result中地点个数比飞的数量多一,这说明所有飞机都飞过了
之后就是去递归的同时修改地点飞的次数 如果大于0就继续 知道不会往外飞为止
N皇后问题
根本思想是一行一行的去递归
1.需要一个判断的函数, 让加上之后横纵向上45度和向上135度都没有皇后,不看向下的是因为
一行一行去添加,下面还没加到不用管。
2.之后用forloop col 用递归去看row
1.首先也要有一个去判断是否valid的函数
2.确认行和列然后去看当前数符不符合 如果符合就继续全看下一个行列
当全部填完之后 直接返回上来