字符串的C递归置换算法 – >不跳过重复

字符串的C递归置换算法 – >不跳过重复,第1张

概述我很难找到一个简单的语句来跳过这个递归排列代码的重复项.我到处看,似乎只找到使用swap或 java的例子.从我收集的内容来看,我认为我需要在for-loop之后放一条线. 谢谢! #include "genlib.h"#include "simpio.h"#include <string>#include <iostream>void ListPermutations(string p 我很难找到一个简单的语句来跳过这个递归排列代码的重复项.我到处看,似乎只找到使用swap或 java的例子.从我收集的内容来看,我认为我需要在for-loop之后放一条线.

谢谢!

#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递归置换算法 – >不跳过重复所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存