求入栈顺序为1234……N的序列的所有可能的出栈序列


class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("输入一个正整数:");
        string nStr = Console.ReadLine();

        int n;
        while(true)
        {
            if (int.TryParse(nStr, out n))
            {
                var stack = new Stack<int>();
                var outList = new List<int>();
                int count = 0;
                Fun(1, n, stack, outList,ref count);
                Console.WriteLine($"总计{count}种出栈方式。");

                Console.WriteLine("输入一个正整数:");
                nStr = Console.ReadLine();
            }
            else
            {
                nStr = Console.ReadLine();
            }
        }
    }
    private static void Fun(int x, int n, Stack<int> stack, List<int> outList,ref int count)
    {
        if (outList.Count == n)
        {
            count++;
            Console.WriteLine(string.Join(',', outList));
        }

        if (x <= n)
        {
            stack.Push(x);
            Fun(x + 1, n, stack, outList, ref count);
            stack.Pop();
        }

        if(stack.Count > 0)
        {
            var temp = stack.Peek();

            stack.Pop();
            outList.Add(temp);

            Fun(x, n, stack, outList, ref count);

            stack.Push(temp);
            outList.RemoveAt(outList.Count - 1);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/wj033/p/9124249.html