【位运算】B017

编程入门 行业动态 更新时间:2024-10-09 02:27:20

【位运算】B017

【位运算】B017

一、Problem

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

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

输入: N = 4, K = 5
输出: 1解释:
第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001

注意:

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

二、Solution

方法一:递归

思考

K 很大,休想骗我拿出暴力法;

规律是:第 N 行的前半段由第 N-1 行整行构成,后半段由第 N-1 行的每位数字取反得到;也就是说如果 K > 第 N-1 行数字的个数 last_sz,则第 K 位数字一定在第 N 行的后半段的 K-last_sz 位置处,且和前半段对称位置的数字"不同"

class Solution {
public:int dfs(int n, int k) {if (n==1) return 0;if (n==2) return k==1 ? 0 : 1;int sz = (1 << n-1) >> 1;if (k <= sz) return  dfs(n-1, k);else         return !dfs(n-1, k-sz);}int kthGrammar(int N, int K) {return dfs(N, K);}
};

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),
  • 空间复杂度: O ( 1 ) O(1) O(1)

更多推荐

【位运算】B017

本文发布于:2024-02-06 06:57:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747316.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!