在第一行咱们写上一个 0
。接下来的每一行,将前一行中的0
替换为01
,1
替换为10
。code
给定行数 N
和序数 K
,返回第 N
行中第 K
个字符。(K
从1开始blog
输入: N = 1, K = 1 输出: 0 输入: N = 2, K = 1 输出: 0 输入: N = 2, K = 2 输出: 1 输入: N = 4, K = 5 输出: 1 解释: 第一行: 0 第二行: 01 第三行: 0110 第四行: 01101001
暴力法:递归
class Solution { public: int kthGrammar(int N, int K) { N = N-1; vector<int> last(1<<N); last[0] = 0; for(int i=1; i<=N; i++){ for(int j=(1<<(i-1))-1; j>=0; j--){ last[2*j] = last[j]; last[2*j+1] = 1-last[j]; } } return last[K-1]; } };
时间、空间复杂度io
哇。。。。递归,超级优秀:ast
class Solution { public: int kthGrammar(int N, int K) { if(N == 1) return 0; int G = kthGrammar(N-1, (K+1)/2); if(K%2 == 1){ return G; }else{ return 1-G; } } };