前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer面试题:26.字符串的排列

剑指Offer面试题:26.字符串的排列

作者头像
Edison Zhou
发布2018-08-20 16:22:16
4780
发布2018-08-20 16:22:16
举报
文章被收录于专栏:EdisonTalkEdisonTalk

一、题目:字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

二、解题思路

2.1 核心步骤

  我们可以把一个字符串看成由两部分组成:第一部分为它的第一个字符,第二部分是后面的所有字符。在下图中,我们用两种不同的背景颜色区分字符串的两部分。

Step1.把字符串分为两部分,一部分是字符串的第一个字符,另一部分是第一个字符以后的所有字符(有阴影背景的区域)。

Step2.接下来我们求阴影部分的字符串的排列,拿第一个字符和它后面的字符逐个交换。

2.2 代码实现

代码语言:javascript
复制
    public static void Permutation(char[] str)
    {
        if (str == null)
        {
            return;
        }

        Permutation(str, str, 0);
    }

    public static void Permutation(char[] str, char[] begin, int startIndex)
    {
        if (startIndex == str.Length)
        {
            Console.WriteLine(str);
        }
        else
        {
            for (int i = startIndex; i < str.Length; i++)
            {
                char temp = begin[i];
                begin[i] = begin[startIndex];
                begin[startIndex] = temp;

                Permutation(str, begin, startIndex + 1);

                temp = begin[i];
                begin[i] = begin[startIndex];
                begin[startIndex] = temp;
            }
        }
    }

三、单元测试

3.1 测试用例

  (1)封装测试辅助方法

代码语言:javascript
复制
    public static void TestPortal(string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            Console.WriteLine("Test for NULL begins:");
            Permutation(null);
        }
        else
        {
            Console.WriteLine("Test for {0} begins:", str);
            Permutation(str.ToCharArray());
        }

        Console.WriteLine();
    }

  (2)功能测试、特殊输入测试

代码语言:javascript
复制
    public static void Test1()
    {
        TestPortal(null);
    }

    public static void Test2()
    {
        string str = "";
        TestPortal(str);
    }

    public static void Test3()
    {
        string str = "a";
        TestPortal(str);
    }

    public static void Test4()
    {
        string str = "ab";
        TestPortal(str);
    }

    public static void Test5()
    {
        string str = "abc";
        TestPortal(str);
    }

3.2 测试结果

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目:字符串的排列
  • 二、解题思路
    • 2.1 核心步骤
      • 2.2 代码实现
      • 三、单元测试
        • 3.1 测试用例
          • 3.2 测试结果
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档