2019.8.14 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)

这道题有两种思路:

1.可以将序列看成一棵二叉树,那么每一个左子结点与父节点相同,右节点与父节点相反,而K的奇偶又在满二叉树数组中代表了左右子树,可以很容易用递归获得结果。

2.观察可以发现每一层数组每一个后半部分正好是前半部分取反,那么如果K位于数组的后半部分,必然能够找到前半部分所对应的反码位置K -= (1 << N-2)。进行递归操作不断对后半部分的K取反,可以获得结果。

但事实上我们不必层层递归,只需要知道K取反的次数即可。K取反的次数恰为K-1中二进制1的个数。因此可以利用Integer.bitCount()方法一步到位,翻转次数为奇数,最终取1,反之为0。


传送门:第K个语法符号

On the first row, we write a 0. Now in every subsequent row, we look at the previous row and replace each occurrence of 0 with 01, and each occurrence of 1 with 10.

Given row N and index K, return the K-th indexed symbol in row N. (The values of K are 1-indexed.) (1 indexed).

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


/*** On the first row, we write a 0. Now in every subsequent row, we look at the previous row and replace each occurrence of 0 with 01, and each occurrence of 1 with 10.* Given row N and index K, return the K-th indexed symbol in row N. (The values of K are 1-indexed.) (1 indexed).* 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。* 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)*/public class KthSymbolInGrammar {//递归public int kthGrammar(int N, int K) {if (N == 1) {return 0;}int result = kthGrammar(N - 1, (K + 1) >> 1);//result为父节点,K为子结点,K的奇偶代表子树的左右//父0子奇=0,父0子偶=1,父1子奇=1,父1子偶=0return result == 1 ? ((K & 0x01) == 0 ? 0 : 1) : ((K & 0x01) == 0 ? 1 : 0);}//递归:逻辑改进public int kthGrammar2(int N, int K) {if (N == 1) {return 0;}return (~K & 1) ^ kthGrammar(N - 1, (K + 1) / 2);}//递归:翻转思想//后半部分总是与前半部分相反,也就是说:'0' 变成 '1' 而 '1' 变成 '0'//如果 K 在后半部分,那么我们可以将 K -= (1 << N-2) 、、设为前半部分,然后翻转得到最终答案。public int kthGrammar3(int N, int K) {if (N == 1){return 0;}if (K <= 1 << N - 2){return kthGrammar(N - 1, K);}return kthGrammar(N - 1, K - (1 << N - 2)) ^ 1;}//二进制计数:翻转次数等于K-1中二进制1的个数public int kthGrammar4(int N, int K) {return Integer.bitCount(K - 1) & 1;}
}

#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#

LeetCode(779):第K个语法符号 K-th Symbol in Grammar(Java)相关推荐

  1. 20191019:(leetcode习题)第K个语法符号

    第K个语法符号 题目 大致思路 代码实现 题目 在第一行我们写上一个 0.接下来的每一行,将前一行中的0替换为01,1替换为10. 给定行数 N 和序数 K,返回第 N 行中第 K个字符.(K从1开始 ...

  2. LeetCode779 第K个语法符号 python刷题Day5

    779.第K个语法符号 差一点今天就前功尽弃了,瘫在沙发上一时爽,一直瘫着废到老.想想昨天被一道评级为简单的题困住了.虽然我上学上的久,但我学的东西少啊.好了,开正题了,士可以一日不食而不能半日不学. ...

  3. LeetCode 779. 第K个语法符号(找规律)

    1. 题目 在第一行我们写上一个 0. 接下来的每一行,将前一行中的0替换为01,1替换为10. 给定行数 N 和序数 K,返回第 N 行中第 K个字符.(K从1开始) 例子: 输入: N = 1, ...

  4. leetcode 779. K-th Symbol in Grammar | 779. 第K个语法符号(Java)

    题目 https://leetcode.com/problems/k-th-symbol-in-grammar/ 题解 思考 15 分钟,编码 1 分钟. 其实目标位置在哪一行不重要,因为每一行都有相 ...

  5. LeetCode题目笔记——779. 第K个语法符号,从超时到0ms(bushi)

    文章目录 题目描述 题目难度--中等 方法一:模拟 代码/Python 方法二:观察规律 代码/Python 总结 这道题是今天的每日一题,还挺有意思的,所以记录一下 题目描述 我们构建了一个包含 n ...

  6. 力扣 779. 第K个语法符号

    题目 我们构建了一个包含 n 行( 索引从 1 开始 )的表.首先在第一行我们写上一个 0.接下来的每一行,将前一行中的0替换为01,1替换为10. 例如,对于 n = 3 ,第 1 行是 0 ,第 ...

  7. 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)

    [LeetCode][HOT]347. 前 K 个高频元素 文章目录 [LeetCode][HOT]347. 前 K 个高频元素 package hot;import java.util.Arrays ...

  8. 【LeetCode】【HOT】23. 合并K个升序链表(递归+分治)

    [LeetCode][HOT]23. 合并K个升序链表 文章目录 [LeetCode][HOT]23. 合并K个升序链表 package hot;import java.util.Arrays;cla ...

  9. 解题思路-LeetCode第713题:乘积小于K的子数组

    解题思路-LeetCode第713题:乘积小于K的子数组 题目描述: 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2 ...

最新文章

  1. msf生成linux shellcode,MSF-Shellcode生成和使用
  2. Fail2ban初识
  3. 修改 MySQL 自增ID的起始值
  4. V星入侵(V 2009)第一季全集下载
  5. python列表常用方法实践_python 列表list 常用方法
  6. 面向普通人的 PHP 加密
  7. 代码审计系列篇一之代码审计学习思路
  8. 【转】摩托罗拉推开源硬件平台计划Project Ara
  9. python commands执行不连续_[Python] 利用commands模块执行Linux shell命令
  10. java运行提示runtime,Java 执行运行时命令 Runtime
  11. python 笔记 之 练习答案-ABCD乘以9=DCBA
  12. ITIL 4 Foundation题目-4
  13. 把Android系统签名弄成jks
  14. linux 鼠标光标由箭头变成十字形恢复方法
  15. HQChart使用教程85-股票复权计算
  16. 视觉推理(Visual Reasoning)
  17. C#实现多人语音聊天
  18. 前端笔记(11) Vue3 Router 编程式导航 router.push router.replace
  19. 看看 NF_HOOK 宏
  20. 试读《Java特种兵(上册)》

热门文章

  1. vue高德地图省市区,区域划分。district.search 一直报no_data
  2. QPSO---收缩扩张系数的选择方案(未完待续)
  3. 从视频分片转码的效率来看编码,解码效率
  4. 国产芯片开始进攻移动芯片和PC处理器市场,ARM终于尝到了苦果,华为的大仇得报...
  5. AArch64教程第一章
  6. 【PCB干货】是开窗还是盖油?想搞懂过孔工艺,看这篇就够了!
  7. AutoCAD2020精简优化版 64位下载
  8. Splashtop 与 Acronis 集成,提供可扩展的远程支持
  9. 【LittleXi】规划兼职工作
  10. 自己实现一个complex class(复数类)