当前位置: 首页 > news >正文

芙蓉区网站建设网站设计色板

芙蓉区网站建设,网站设计色板,天眼查企业工商查询,绍兴网站建设电话格雷编码格雷编码的定义格雷编码的码表LeetCode 89. 格雷编码实例思路与代码思路一:找规律代码一代码二思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道)代码一LeetCode 1238. 循环码排列实例思路与代码…

格雷编码

    • 格雷编码的定义
    • 格雷编码的码表
    • LeetCode 89. 格雷编码
      • 实例
      • 思路与代码
        • 思路一:找规律
          • 代码一
          • 代码二
        • 思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道)
          • 代码一
    • LeetCode 1238. 循环码排列
      • 实例
      • 思路与代码
        • 思路一:找规律
        • 代码一
        • 思路二:与自然数之间的关系
        • 代码一:

格雷编码的定义

格雷编码我们在大学时期已经了解过了,在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。 [2] 在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码有多种编码形式。
格雷码(Gray code)曾用过Grey Code、葛莱码、葛兰码、格莱码、戈莱码、循环码、二进制反射码、最小差错码等名字,它们有的是错误的,有的易与其它名称混淆,建议不再使用它们。

格雷编码的码表

自然数自然数的二进制一位格雷码二位格雷码三位格雷码四位格雷码
000000000000000
100011010010001
20010110110011
30011100100010
401001100110
501011110111
601101010101
701111000100
810001100
910011101
1010101111
1110111110
1211001010
1311011011
1411101001
1511111000

LeetCode 89. 格雷编码

LeetCode 89. 格雷编码
n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:
每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)
第一个整数是 0
一个整数在序列中出现 不超过一次
每对 相邻 整数的二进制表示 恰好一位不同 ,且
第一个 和 最后一个 整数的二进制表示 恰好一位不同
给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

实例

输入:n = 2
输出:[0,1,3,2]
解释:
[0,1,3,2] 的二进制表示是 [00,01,11,10]- 0001 有一位不同
- 0111 有一位不同
- 1110 有一位不同
- 1000 有一位不同
[0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01]- 0010 有一位不同
- 1011 有一位不同
- 1101 有一位不同
- 0100 有一位不同

思路与代码

思路一:找规律

观察格雷码的规律,具有一定的对称性,高位是 1 或者 0,并由此就行对称

代码一
//耗时 6ms
class Solution {public List<Integer> grayCode(int n) {int count = 1;List<Integer> res = new ArrayList<>();res.add(0);res.add(1);while (n-- > 1) {count <<= 1;for (int i = count - 1; i >= 0; i--) {res.add(res.get(i) + count);}}return res;}
}

因为res.get(i)是循环方式去取值,当n的位数确定后格雷数就已经知道多少了,故可以这样写

代码二
class Solution {public List<Integer> grayCode(int n) {Integer[] res = new Integer[1 << n];res[0] = 0;res[1] = 1;int count = 1;while (n-- > 1) {count <<= 1;for (int i = 0; i < count; i++) {res[i + count] = count + res[count - i - 1];}}return Arrays.asList(res);}
}

思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道)

格雷码→二进制码(解码):
从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。依次异或,直到最低位。依次异或转换后的值(二进制数)就是格雷码转换后二进制码的值。

代码一
class Solution {public List<Integer> grayCode(int n) {List<Integer> res = new ArrayList<>();int sum = 1<<n;for(int i = 0;i < sum;i++){res.add((i >> 1) ^ i);}return res;}
}

LeetCode 1238. 循环码排列

LeetCode 1238. 循环码排列
给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,…,2^n-1) 的排列 p,并且满足:
p[0] = start
p[i] 和 p[i+1] 的二进制表示形式只有一位不同
p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同
实例:

实例

输入:n = 2, start = 3
输出:[3,2,0,1]
解释:这个排列的二进制表示是 (11,10,00,01)所有的相邻元素都有一位是不同的,另一个有效的排列是 [3,1,0,2]

思路与代码

题目与上面的是一样的,所有解决方法也是两种

思路一:找规律

观察格雷码的规律,具有一定的对称性,高位是 1 或者 0,并由此就行对称

代码一

class Solution {public List<Integer> circularPermutation(int n, int start) {List<Integer> ans = new ArrayList<>();Integer[] res = new Integer[1 << n];res[0] = 0;res[1] = 1;int count = 1;int index = start; // 找到位置, 存在start 为 0,1的问题,故直接赋值过去while (n-- > 1) {count <<= 1;for (int i = 0; i < count; i++) {res[i + count] = count + res[count - i - 1];if (res[i + count] == start) {index = i + count;}}}for (int i = 0; i < res.length; i++) {ans.add(res[(index + i) % res.length]);}return ans;}
}

思路二:与自然数之间的关系

要通过观察,格雷数的 ^ 关系,格雷是从0开始的,0^任意数都是本身,然后格雷数每个与前一个变化相差为一,故一直第一个数 ^ 结果就是你想要的

代码一:

class Solution {public List<Integer> circularPermutation(int n, int start) {List<Integer> res = new ArrayList<>();int sum = 1<<n;for(int i = 0;i < sum;i++){res.add((i >> 1) ^ i ^ start);}return res;}
}
http://www.yayakq.cn/news/463807/

相关文章:

  • 网站设计会计分录怎么做怎样查看网站的权重
  • 做设计兼职网站江志文周诗雨
  • 自己写小说的网站老版本网站开发工具
  • 建设工程协会网站查询系统WordPress优惠券主题
  • 建设银行大丰支行网站系统之家官网
  • 大兴网站制作哪家网站建设比较好
  • 微信公众号上微做网站春节彩灯制作公司
  • 目标网站都有哪些内容网站推广排名报价
  • 网站怎么盈利的广州电玩网站开发
  • 富阳网站建设找哪家网站建设愿景
  • 有了域名和云主机怎么做网站网页设计基础教程题库
  • 如何进入网站管理页面网络营销的手段包括
  • 制作手机网站用什么软件域名格式大全
  • 域名注册哪个网站好抓取网站访客数据原理
  • 三亚房地产网站制作网业加速器
  • 做网站必须有主机吗tiktok跨境电商好做吗
  • 网站排名在哪里优化深圳宝安区是市中心吗
  • 如何在税局网站上做税种认定wordpress基础教程
  • 创建网站的软件网站建设报价表表格下载
  • 怎么做qq代挂网站用dw制作网页步骤
  • 如何开发网站平台开发app和微网站有哪些
  • 网站建设费算广告费吗网站开发 适应 手机 电脑
  • 做网站推广怎么跟客户沟通佛山做优化的公司哪家好
  • 织梦可以做论坛网站吗做婚礼策划的网站
  • 九九建站-网站建设 网站推广 seo优化 seo培训网站的建设和设计方案
  • 泉州做网站哪家好网页html代码
  • 重庆自助企业建站模板网站建设熊掌号里属于什么领域
  • 深圳做微藻的公司网站wordpress w3 total cache 编码错误
  • 网站的实用性定制开发电商网站建设多少钱
  • 无锡富通电力建设有限公司网站免费网站seo优化