一道递归题

给定一串由0, 1, ?组成的字符,如"0?10?00", 用0或1替换其中的问号,列举出所有可能的情况。

看到这个题首先反应的是用递归,代码如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void strTrans(string str, int idx, vector<string>& res)
{
    if(idx == str.length())
    {
        res.push_back(str);
        return;
    }

    if(str[idx] == '?')
    {
        str[idx] = '0';
        strTrans(str, idx+1, res);
        str[idx] = '1';
        strTrans(str, idx+1, res);
    }
    else
        strTrans(str, idx+1, res);
}

int main()
{
    string str = "???";
    vector<string> res;
    strTrans(str, 0, res);
    int len = res.size();
    for(int i = 0; i < len; i++)
    {
        cout << res[i] << endl;
    }

    return 0;
}

接下来需要写测试样例:

1. 在进行单元测试的时候,需要考虑哪些情况?

testcase至少需要包含以下情况:

1. 能覆盖写的代码的每一行。

2. 测试边界情况,如0, null, 递归的基准情况,大数值等。

“” --> “”

“?”   -->  "0", "1"

"1"   --> "1"

"1?"  --> "10", "11";

"??" --> "11", "10", "01", "00"

2. 在进行单元测试时,output怎么写可以避免出现测试样例的output与程序输出的output的顺序不一致问题?

3. 如果输入字符串包含许多“?”,如包含100个“?”,会出现什么情况?

答:100个“?”, 则会有2^100个结果字符串,存储在res中,会将内存消耗完。

4. 有方法可以避免这种情况的发生吗?

 

posted @ 2013-12-04 20:41  darlwen  阅读(136)  评论(0编辑  收藏  举报