做网站建设的目的,网站策划布局,wordpress营销主题,萧山品牌网站建设文章目录 一、题目二、C# 题解 一、题目 在经典汉诺塔问题中#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘#xff0c;盘子可以滑入任意一根柱子。一开始#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以… 文章目录 一、题目二、C# 题解 一、题目 在经典汉诺塔问题中有 3 根柱子及 N 个不同大小的穿孔圆盘盘子可以滑入任意一根柱子。一开始所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动一个盘子; (2) 盘子只能从柱子顶端滑出移到下一根柱子; (3) 盘子只能叠在比它大的盘子上。 请编写程序用栈将所有盘子从第一根柱子移到最后一根柱子。 你需要原地修改栈。
示例1: 输入 A [2, 1, 0], B [], C [] 输出 C [2, 1, 0] 示例2: 输入 A [1, 0], B [], C [] 输出 C [1, 0] 提示:
A中盘子的数目不大于14个。 点击此处跳转题目。
二、C# 题解 经典的汉诺塔问题使用递归求解
public class Solution {public void Hanota(IListint A, IListint B, IListint C) {Partition(A.Count, A, B, C);}public void Partition(int n, IListint A, IListint B, IListint C) {if (n 1) { // 只剩一个盘子递归出口C.Add(A[^1]);A.RemoveAt(A.Count - 1);return;}Partition(n - 1, A, C, B); // 将 A 上方 n - 1 个盘子先移动到 BC.Add(A[^1]); // A 最下方的盘子移到 CA.RemoveAt(A.Count - 1);Partition(n - 1, B, A, C); // 剩余 n - 1 个盘子从 B 移动到 C}
}时间132 ms击败 66.67% 使用 C# 的用户内存41.4 MB击败 73.33% 使用 C# 的用户