zoukankan      html  css  js  c++  java
  • 第K个语法符号

    在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。

    给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)


    例子:

    输入: N = 1, K = 1
    输出: 0

    输入: N = 2, K = 1
    输出: 0

    输入: N = 2, K = 2
    输出: 1

    输入: N = 4, K = 5
    输出: 1

    解释:
    第一行: 0
    第二行: 01
    第三行: 0110
    第四行: 01101001

    注意:

    N 的范围 [1, 30].
    K 的范围 [1, 2^(N-1)].

    code1:递归

    class Solution {
    public:
        int kthGrammar(int N, int K) {
            if(N<=0||K<=0)
                return -1;
            if(N==1&&K==1)
                return 0;
    
            if(K&1)//K奇数,第N行第K个数字是由第N-1行,第(K+1)/2个数字决定的,此时第N行K个数字和N-1,(K-1)/2个数字相同
            {
                int up=(K+1)/2;
                int res=kthGrammar(N-1,up);
                return res;
            }
            else//K偶数,第N行第K个数字是由第N-1行,第K/2个数字决定的,此时第N行K个数字和N-1,K/2个数字值相反
            {
                int up=K/2;
                int res=kthGrammar(N-1,up);
                return res==0?1:0;
            }
        }
    };

     code2:code1的改进版

    class Solution {
    public:
        int kthGrammar(int N, int K) {
            if(N<=0||K<=0)
                return -1;
            if(N==1&&K==1)
                return 0;
    
            //第k个数字可以映射为(K+1)/2个数字
            int up=(K+1)/2;
            int res=kthGrammar(N-1,up);
            return K&1?res:1-res;//K为奇数,则k与返回值相同,否则相反
        }
    };
  • 相关阅读:
    Install Postgresql on Ubuntu
    Pytest
    Pytest
    wrk 压力测试
    Objective-C 格式化字符串Format
    安装BeyondCompare on Ubuntu
    eclipse + python + pydev (Pydev安装成功确看不到插件的解决办法)
    如何解决: Ubuntu 系统 adb devices出现no permissions
    oracle rac搭建
    CentOS6.8编译安装LAMP
  • 原文地址:https://www.cnblogs.com/tianzeng/p/12015191.html
Copyright © 2011-2022 走看看