网上有很多讲解全排列递归的算法思路以及程序,所以在此本菜鸟就不再写一遍了。
今天的重点在解决重复字符方面,感觉网上博客里的解决思路大都一致,写一个isSwap函数,然后在递归主体里判断一下函数返回true还是false,大神们也都po出了程序运行图。然而我这么写的程序最终跑不出来预期结果,因此我分析了一下,觉得可以有一个更为简单的办法去重。
要点就是:如果发现待交换的两个字符str[i] == str[k],并且i!=k时,就不交换了,如此即可去重
可运行代码如下(去重判断部分已加粗):
if(i==k || (str[i]!=str[k])){
运行结果:

文章来源: 全排列递归(解决了重复字符问题)