`
wangyi878750
  • 浏览: 184935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
台阶问题 台阶问题 非递归算法解台阶问题,倒退算法
    void printOut(String s) {
    //  System.out.print(s);
    }

    void printOut(char[] c, int len) {
    //  System.out.print(s);
    }

    static char ccc[] = {'0', '1', '2', '3'};

    private void printOne(int steps[], int len) {

        if (len > 0) {
            printOut(ccc[steps[0]]);
        }
        for (int i = 1; i < len; i++) {
            printOut(',');
            printOut(ccc[steps[i]]);
        }
        printOut("\r\n");
    }

    public void yaoyuan(int n) {

        if (n <= 0) {
                return;
        }
        // 存放所有的走法
        int steps[] = new int[n];
        // 初始化为每步走1个台阶
        for (int i = 0; i < n; i++) {
                steps[i] = 1;
        }
        // 输出第一种走法
        printOne(steps, n);

        int pre = 0;
        int last = n - 1;
        while (last > 0) {
            pre = last - 1;
            switch (steps[last]) {
            case 1: {
                steps[pre]++;
                steps[last]--;
                last--;
                break;
            }
            case 2: {
                steps[pre]++;
                steps[last] = 1;
                break;
            }
            case 3: {
                steps[pre]++;
                steps[last] = 1;
                last++;
                steps[last] = 1;
                break;
            }
            }

            // 是否需要进位
              while (pre > 0 && steps[pre] == 4) {
                steps[pre] = 1;
                pre--;
                steps[pre]++;

                last++;
                steps[last] = 1;
                last++;
                steps[last] = 1;
            }
            // 是否已经结束
              if (pre == 0 && steps[0] == 4) {
                break;
            }
            // 输出一种走法
              printOne(steps, last + 1);
        }
    }
Global site tag (gtag.js) - Google Analytics