题解 | #汉诺塔问题#

汉诺塔问题

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);
    }
};
全部评论

相关推荐

高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务