码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】K-th Symbol in Grammar

时间:2018-02-05 23:28:47      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:leetcode   递推   ret   info   height   pos   elf   接下来   就是   

题目如下:

技术分享图片

解题思路:直接把每行的数据计算出来肯定是不行的,因为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

 

【leetcode】K-th Symbol in Grammar

标签:leetcode   递推   ret   info   height   pos   elf   接下来   就是   

原文地址:https://www.cnblogs.com/seyjs/p/8419467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!