美文网首页
<剑指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