【LeetCode】 779. 第K个语法符号

版权声明:made by YYT https://blog.csdn.net/qq_37621506/article/details/83073769

递归

  1. 题目

在第一行我们写上一个 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

  1. 分析
    将每一行写出寻找规律:
n
1 0
2 0 1
3 0 1 1 0
4 0 1 1 0 0 1 1 0
5 0 1 1 0 0 1 1 0 1 0 0 1 0 1 1 0

第n行:奇数位与n-1行相同;偶数位置与n-1相反
3. 代码

include <iostream>
using namespace std;
int kthGrammar(int N, int K)
{
    if(N==1)
        return 0;
    else{
        if(K%2==1){
            return kthGrammar(N-1,K/2+1);
        }
        else
            return !kthGrammar(N-1,K/2);
    }
}
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        cout << kthGrammar(n,m) << endl;
    }
    return 0;
}

参考别人的算法


class Solution {
public:
    int kthGrammar(int N, int K) {

	    if(K==1) return 0;
            if(K==2) return 1;
        int res=0;
        for(int i=N-2;i>=0;--i)
        {
            if(K>pow(2,i)) {K=K-pow(2,i);res=1-res;
   		}
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_37621506/article/details/83073769