美文网首页
<剑指Offer>面试题38: 字符串的排列

<剑指Offer>面试题38: 字符串的排列

作者: cb_guo | 来源:发表于2019-03-10 11:27 被阅读0次

    题目描述

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

    题目解读

    • 剑指Offer 197
    • 递归的思想,把一个字符串看成是由两部分组成:第一部分是它的第一个字符;第二部分是它的后面的所有字符。
    • 第一步:求所有可能出现在第一个位置的所有字符,即把第一个字符和后面的所有字符交换
    • 第二步:固定第一个字符,求后面所有字符的排列。这时候我们仍把后面的所有字符分为两部分:后面字符的第一个字符,以及这个字符之后的所有字符,然后把第一个字符逐个和它后面的字符交换

    代码

    #include<iostream>
    using namespace std;
    
    void swap(char *a, char *b){
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void percore(char *pstr, char *pbegin){
        if(*pbegin == '\0'){
            cout<<pstr<<endl;
        }
        else{
            for(char *pch=pbegin; *pch != '\0'; pch++){
                swap(pch, pbegin);
                percore(pstr, pbegin+1);
                swap(pch, pbegin);
            }
        }
    }
    
    void per(char str[]){
        percore(str, str);
    }
    
    int main(){
        char str[9] = "abc";
        per(str);
        return 0;
    }
    

    总结展望

    相关文章

      网友评论

          本文标题:<剑指Offer>面试题38: 字符串的排列

          本文链接:https://www.haomeiwen.com/subject/lalupqtx.html