对遍历的思考

在程序中很多时候都需要进行遍历数据,当遇到排列组合问题时最常见的解决办法就是多层循环遍历。但是这中方法在有时好像并不轻松。

比如求9位1-9数字排列组合的所有解时,要用for循环遍历所有解的话需要写9层for循环。循环的此数为9^9.这样写起来过于繁琐,我们可用引入进制的概念进行遍历。

比如1-9共9个数字可用采用9进制(满9进1),这样一个排列组合的情况可用用9位9进制的数进行表示,每一位(0-8)分别代表(1-9),这样一个循环就能遍历这个排列组合的所有情况

 for(int i=0;i<9*9*9*9*9*9*9*9*9;i++){
    String num = "";
    int currtNum=i;
    for(int j=0;j<9;j++){
        num+=(currtNum%9+1);
        currtNum=currtNum/9;
    }
    syso(num);
}

虽然计算的次数并没有减少,但是遍历时的代码量大大的减少了。

添加新评论