28.字符串的排列

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

解题思路:递归调用;递归算法的四个特性:1.必须可以达到终止条件,否则会陷入死循环;2、子问题在规模上比原问题小;3、子问题可以通过再次递归调用;4、子问题的解可以组成整个问题的解


两步走:第一步,求所有可能出现在第一个位置的字符,即把第一个字符和后面的字符交换

             第二步,固定第一个字符,求后面所有字符的排列,这时候如需要把后面的字符串分成两部分,后面字符串的第一个字符,以及这个字符之后的所有字符,然后回到第一步.......


using System.Collections.Generic;
class Solution
{
    List<string> list=new List<string>();
    public List<string> Permutation(string str)
    {
        // write code here
        
        if(string.ReferenceEquals(str, null) || str.Length == 0){
            return list;
        }
        char[] chars=str.ToCharArray();
        SortedSet<string> temp=new SortedSet<string>();
        Permutation(chars,0, temp);
        
        list.AddRange(temp);
        return list;
    }
    public void Permutation(char[] chars,int begin,SortedSet<string> list ){
        if (chars == null || chars.Length == 0 || begin < 0 || begin> chars.Length - 1)
        {
            return;
        }
 
        if (begin == chars.Length - 1)
        {
            list.Add(new string(chars));
        }
        else{
            for(int i=begin;i<=chars.Length-1;i++){
                swap(chars,begin,i);
                Permutation(chars,begin+1,list);
                swap(chars,begin,i);
            }
        }
    }
    public void swap(char[] chars,int a,int b){
        char temp=chars[a];
        chars[a]=chars[b];
        chars[b]=temp;
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符串以\0(即空字符)来标志字符串的结束。在C语言中,字符串是由一系列连续的字符组成的,最后一个字符必须是\0来表示字符串的结束。这个字符的ASCII码值为0,表示空字符。 在使用字符串时,我们可以使用字符数组来存储和操作字符串。在数组中,字符串的实际内容被存储在字符数组的相邻位置,以连续的方式排列。最后一个字符是\0,用来表示字符串的结束。 当我们使用字符串的各种函数时,它们会根据\0来确定字符串的结束位置。这样,我们可以通过在数组中找到\0来确定字符串的长度。 例如,如果我们有一个字符数组char str[10],其中存储了一个字符串"Hello",那么实际上在字符数组中存储的内容是{'H', 'e', 'l', 'l', 'o', '\0', 0, 0, 0, 0}。当我们使用字符串函数时,比如strlen(str),它会从数组开始位置开始遍历,直到找到\0为止,从而确定字符串的长度为5。 另外,在字符串的输入和输出时,我们也需要注意\0的存在。当我们使用scanf函数输入一个字符串时,它会将输入的字符存储到字符数组中,并在最后加上\0来标志字符串的结束。同样地,当我们使用printf函数输出一个字符串时,它会从字符数组的开始位置开始输出,直到遇到\0为止。 总之,使用\0来标志字符串的结束,是C语言字符串的一种约定和常用方式。它使得我们可以方便地操作和处理字符串,包括确定字符串的长度和进行输入输出操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值