参考:【基础算法】- 全排列
代码参考上面链接,花了一些功夫才读懂,添加了注释。
经验是:读代码时拿纸笔模拟单步执行,方便理解。
还学到了不申请额外空间完成值交换的骚操作。感谢作者。
#include <iostream>
using namespace std;
//交换数值的骚操作,三个异或。
void swap(char* array , int i , int j){
//位操作输入有4种情况,异或操作^的输出0、1数量是2:2,能保持足够的信息量。&、|的结果则是1:3,3:1。
//C没有同或。
if(i != j){
array[i]