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

题目描述

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

题目解读

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

代码

#include
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<

总结展望

你可能感兴趣的:(<剑指Offer>面试题38: 字符串的排列)