分享

程序员面试攻略 6.2 面试例题:字符串的全排列

 shaobin0604@163.com 2006-10-24

/************************************************************************
6.2 面试例题 字符串的全排列
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/************************************************************************
程序一:
************************************************************************/
void doPermute(char input[], char output[], int used[], int length, int recursLev) {
 int i;

 if (recursLev == length) {
  printf("%s\n", output);
  return;
 }

 for (i = 0; i < length; i++) {
  if (used[i])
   continue;
  output[recursLev] = input[i];
  used[i] = 1;
  doPermute(input, output, used, length, recursLev + 1);
  used[i] = 0;
 }
}

int permute(char instr[]) {
 int length, i, *used;
 char *out;

 length = strlen(instr);
 out = (char*)malloc(length + 1);

 if (out == NULL)
  return 0;
 out[length] = ‘\0‘;

 used = (int*)malloc(sizeof(int)*length);

 if (used == NULL)
  return 0;
 
 for (i = 0; i < length; i++) {
  used[i] = 0;
 }

 doPermute(instr, out, used, length, 0);

 free(out);
 free(used);

 return 1;
}


/************************************************************************
程序二:
************************************************************************/

void swap(char str[], int i, int j) {
 char temp = str[i];
 str[i] = str[j];
 str[j] = temp;
}

 

void doPerm(char str[], int length, int recursLev) {
 int i;
 if (recursLev == length) {
  printf("%s\n", str);
 } else {
  for (i = recursLev; i < length; i++) {
   swap(str, i, recursLev);
   doPerm(str, length, recursLev + 1);
   swap(str, i, recursLev);
  }
  
 }
}

void perm(char str[]) {
 int length;
 length = strlen(str);
 doPerm(str, length, 0);
}

int main() {
 char str[] = "abc";
 permute(str);
 printf("%s\n", "--------------------");
 perm(str);
 return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多