题解 | #汉诺塔问题#

汉诺塔问题

http://www.nowcoder.com/practice/7d6cab7d435048c4b05251bf44e9f185

经典递归入门题,只需要三步即可。

  1. 将left的n-1个盘子通过right移到mid上
  2. 将1个盘子从left移到right上
  3. 将mid上n-1个盘子通过left移到right上
class Solution {
public:
    vector<string> res;
    vector<string> getSolution(int n) {
        // write code here
        string l="left", m = "mid", r = "right";
        hanoi(l, m, r, n);
        return res;
    }
    // 1. 将left的n-1个盘子通过right移到mid上
    // 2. 将1个盘子从left移到right上
    // 3. 将mid上n-1个盘子通过left移到right上
    void hanoi(string &left, string &mid, string &right, int n) {
        if(n < 1) return ;
        hanoi(left, right, mid, n-1);
        move(left, right);
        hanoi(mid, left, right, n-1);
    }
    void move(string &x, string &y) {
        res.push_back("move from " + x + " to " + y);
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务