参考大佬的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)