https://leetcode.com/problems/k-th-symbol-in-grammar/description/
题目大意:0开始,之后每行是由上一行的 0变成01,1变成10,问第n行第k个是什么。
解题思路:发现第n行前,2^(n-2)个和n-1行相同,后2^(n-2)个是由前面的取反得到的。不知道该怎么证明。
发现这个之后,递归一下就可以了。
class Solution {
public int kthGrammar(int n, int k) {
if(n==1) return 0;
if(n==2 && k==1) return 0;
if(n==2 && k==2) return 1;
int tmp = (int)Math.pow((double)2,n-2);
if(k> tmp)
{
return ((kthGrammar(n-1,k-tmp)+1) %2) ;
}
else
return kthGrammar(n-1,k);
}
}