谢谢!
#include "genlib.h"#include "simpio.h"#include <string>#include <iostream>voID ListPermutations(string prefix,string rest);int main() { cout << "Enter some letters to List permutations: "; string str = Getline(); cout << endl << "The permutations are: " << endl; ListPermutations("",str); return 0;}voID ListPermutations(string prefix,string rest){ if (rest == "") { cout << prefix << endl; } else { for (int i = 0; i < rest.length(); i++) { if (prefix != "" && !prefix[i]) continue; // <--- I trIEd adding this,but it doesn't work cout << endl<< "prefix: " << prefix << " | rest: " << rest << endl; string newPrefix = prefix + rest[i]; string newRest = rest.substr(0,i) + rest.substr(i+1); ListPermutations(newPrefix,newRest); } }}解决方法 这应该工作:
你的算法是好的,我只添加了一个测试:如果一个位置已经使用了一个独特的字符.如果是,则不再进行排列,因为已经在该位置使用该字符的所有排列.
voID ListPermutations(string prefix,string rest){if (rest == "") { cout << prefix << endl;} else { for (int i = 0; i < rest.length(); i++) { //test if rest[i] is unique. bool found = false; for (int j = 0; j < i; j++) { if (rest[j] == rest[i]) found = true; } if(found) continue; string newPrefix = prefix + rest[i]; string newRest = rest.substr(0,i) + rest.substr(i+1); ListPermutations(newPrefix,newRest); } }}
您也可以在进行排列之前对字符串进行排序,结果将是相同的.
总结以上是内存溢出为你收集整理的字符串的C递归置换算法 – >不跳过重复全部内容,希望文章能够帮你解决字符串的C递归置换算法 – >不跳过重复所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)