题目如下:
解题思路:直接把每行的数据计算出来肯定是不行的,因为N最大是30,那个第N行长度就是2^30次方,这显然不可取。那么就只能找规律了,我采取的是倒推法。例如假如我们要求出第四行第七个元素的值,记为[4,7],显然[4,7]是从第三行的第四个元素计算得来的[3,4],依次类推接下来是[2,2] ,[1,1] 。这样就形成了一个[4,7] -> [3,4] ->[2,2] -> [1,1]递推链。 而[1,1]的值是确定的就是0,那么[2,2]就是0转换成01的第二个元素1,[3,4]就是1转换成10的第二个元素0,[4,7]就是0转换后01的第一个元素0。
完整代码如下:
class Solution(object): def kthGrammar(self, N, K): """ :type N: int :type K: int :rtype: int """ chain = [] t = N p = K while t >= 1: chain.insert(0,p) p = p /2 + p%2 t -= 1 print chain value0 = [0,1] value1 = [1,0] v = 0 for i in range(1,len(chain)): if chain[i] % 2 == 0 and v == 0: v = value0[1] elif chain[i] % 2 == 1 and v == 0: v = value0[0] elif chain[i] % 2 == 0 and v == 1: v = value1[1] elif chain[i] % 2 == 1 and v == 1: v = value1[0] return v