济南正规做网站公司,做网站时图片的分辨率是多少,如何做网站站内搜索,中国室内设计师资格证面试题28#xff1a;字符串的排列 题目#xff1a;输入一个字符串#xff0c;打印出该字符串中字符的所有排列。例如输入字符串abc#xff0c;则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
思路: 这是一个典型的递归问题#xff0c;考虑…面试题28字符串的排列 题目输入一个字符串打印出该字符串中字符的所有排列。例如输入字符串abc则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
思路: 这是一个典型的递归问题考虑如何将复杂问题分解成简单问题最后通过递归解决。我们肯定有这样的经验自己在写abc的全排列的时候肯定会想首先确定第一个字符然后考虑后面有什么排列比如确定第一个字符为a那么剩下的b和c有两种排列分别是bc和cb那么以a开头的字符串有abcacb这两种排列。这就是我们下面程序所需要用到的解题思路。
将字符串排列分解为字符串的第一个字符以及其后的剩余字符。剩余字符串又可以按照前面的思路来解决分解为第一个字符和剩余字符串。当最后只有一个字符的时候程序就到达出口这个时候输出字符串就是其中的一个排列。字符串abc那么可能出现在第一个字符的可能性有三种我们只需要每次交互第一个字符然后计算剩余字符串的排列即可。采用递归思路解决问题。
代码如下:
void Permutation(char *pStr)
{if (pStr nullptr) return;Permutation(pStr, pStr);
}void Permutation(char *pStr, char *pBegin)
{if (*pBegin \0) cout pStr ;else{for (char *pCh pBegin; pCh ! \0; pCh)//这个for循环就是考虑某个位置出现哪个字符{char temp *pCh;*pCh *pBegin;*pBegin temp;Permutation(pStr, pBegin 1);//这个就是考虑后面有什么排列char temp *pCh;*pCh *pBegin;*pBegin temp;}}
}测试用例 ● 功能测试输入的字符串中有1个或者多个字符。 ● 特殊输入测试输入的字符串的内容为空或者是NULL指针。 本题考点 ● 考查思维能力。当整个问题看起来不能直接解决的时候应聘者能否想到把字符串分成两部分从而把大问题分解成小问题来解决是能否顺利解决这个问题的关键。 ● 考查对递归的理解和编程能力。