给定一串由0, 1, ?组成的字符,如"0?10?00", 用0或1替换其中的问号,列举出所有可能的情况。
看到这个题首先反应的是用递归,代码如下:
#include#include #include using namespace std;void strTrans(string str, int idx, vector & 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 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. 有方法可以避免这种情况的发生吗?