参考大佬的java做法,
由题意知,每递归一层,整体vector长度乘以2倍,由于相邻的编码只能有一个数不同,因此需要事先计算出添加1的位置
#include <vector>
class GrayCode {
public:
vector<string> getGray(int n) {
if (n == 1) {
return {"0", "1"};
}
vector<string> prefix = getGray(n - 1);
int size = prefix.size();
vector<string> result(size * 2);
for (int i = 0; i < size; i++) {
result[i] = "0" + prefix[i];
result[size + i] = "1" + prefix[size - i - 1];
}
return result;
}
};
时间复杂度:O(2^n),其中n是输入的整数
空间复杂度:O(n+2^n),递归调用的栈空间复杂度为O(n),而字符串大小为O(2^n)

京公网安备 11010502036488号