字符拼接的递归实现问题请教

wojiushiwangxiong 2015-08-28 09:36:08
前几天发了一个这样的问题:
这样的一个vector<string> = [{"12"},{"ab"},{"cd"},{"1"}'......];
我想把这个数组解析成这样的1ac1,1bc1,1ad1.....
就是说要去每个向量成员中的每一个字符和其他所有向量成员的每个字符都要组合一次,
@fly_dragon_fly 前辈设计了一个遍历的方法,现在我想用递归的方法,请大家教我,谢谢。
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-08-28
  • 打赏
  • 举报
回复
仅供参考:
//输入第一个数n(1<=n<=10)表示符合要求的数共n位,后面跟n个数Mi(0<=i<=n-1,1<=Mi<=10),代表从左到右在第0..n-1个位置上有0..Mi-1共Mi种可能
//输出符合上面要求的所有数
#include <stdio.h>
#include <assert.h>
#define MAX 10
int d[MAX];
int M[MAX];
int n,j;
void loop(int L) {
    int i;

    if (L==n) {
        for (i=0;i<n;i++) printf("%d",d[i]);
        printf(" ");
        return;
    } else {
        for (i=0;i<M[L];i++) {
            d[L]=i;
            loop(L+1);
        }
    }
}
void main() {
    scanf("%d",&n);
    assert(1<=n && n<=MAX);
    for (j=0;j<n;j++) {
        scanf("%d",&M[j]);
        assert(1<=M[j] && M[j]<=MAX);
    }
    loop(0);
}
赵4老师 2015-08-28
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
fly_dragon_fly 2015-08-28
  • 打赏
  • 举报
回复
void dfs(int d,vector<string>&vs,vector<int>&idx){
    if(d==vs.size()){
        transform(vs.begin(),vs.end(),idx.begin(),
                  ostream_iterator<char>(cout),[](const string&s,int i){return s[i];});
        cout<<endl;
        return;
    }
    for(;idx[d]<vs[d].size();++idx[d]) dfs(d+1,vs,idx);
    idx[d]=0;
}

// 
vector<int> idx(vs.size(),0);
dfs(0,vs,idx)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧