首页 > 其他分享 >89. 格雷编码

89. 格雷编码

时间:2022-08-29 23:26:20浏览次数:61  
标签:格雷 编码 01 backtrack int res 89 path 10

难度中等

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

给你一个整数 n ,返回任一有效的 n 位格雷码序列 。

 

示例 1:

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

 

 

 

交替回溯

 

 

 

class Solution {
public:
    vector<int> res;
    void backtrack(string path, int k,int n,string choice) {
        if (n == k) {
            // 二进制转十进制
            int x = stoi(path, nullptr, 2);
            res.push_back(x);
            return;
        }
        backtrack(path+choice[0],k+1,n,"01");        
        backtrack(path+choice[1],k+1,n,"10");
        
    }
    vector<int> grayCode(int n) {
        string path = "";
        backtrack(path,0,n,"01");
        return res;
    }
};

 

 

class Solution {
public:
    vector<int> res;
    void backtrack(string& path, int k,int n,string choice) {
        if (n == k) {
            // 二进制转十进制
            int x = stoi(path, nullptr, 2);
            res.push_back(x);
            return;
        }
        path+=choice[0];
        backtrack(path,k+1,n,"01");        
        path.pop_back();
        
        path+=choice[1];
        backtrack(path,k+1,n,"10");
        path.pop_back();
    }
    vector<int> grayCode(int n) {
        string path = "";
        backtrack(path,0,n,"01");
        return res;
    }
};

 

 

 

class Solution {
public:
    vector<int> res;
    void backtrack(bitset<32>& path, int k,int n) {
        if (n == k) {
            res.push_back(path.to_ulong());
            return;
        }
        backtrack(path,k+1,n);
        path.flip(n-k-1);// 从最高位开始反转
        backtrack(path,k+1,n);

    }
    vector<int> grayCode(int n) {
        bitset<32> path;
        backtrack(path,0,n);
        return res;
    }
};

 

标签:格雷,编码,01,backtrack,int,res,89,path,10
From: https://www.cnblogs.com/zle1992/p/16637788.html

相关文章

  • Python3处理grpc接口返回包含中文编码的protobuf数据时的显示问题
    [本文出自天外归云的博客园]当你用python调用grpc接口的时候,返回的protobuf数据中如果含有中文,会显示成编码模式,类似“\345\214\227\344\272\254”,如何显示成中文呢?这里有......
  • MSM8953/SDM450 去PMI的USB3.0 TYPE-C Micro USB OTG功能适配
    提前说明一下有哪些“坑”。1、PM8953GPIO_8的TZ权限2、PM8953GPIO_8寄存器的写入保护3、去掉高通默认的ID检测4、增加dwc3的ID检测5、增加TYPE-C的IDPIN控制 ......
  • 哈夫曼编码
    哈夫曼编码(Huffmancode)引言:哈夫曼编码是一种压缩编码的编码算法,是基于哈夫曼树的一种编码方式。(哈夫曼树详见:哈夫曼树)哈夫曼编码跟ASCII编码有什么区别?ASCII编......
  • mfc中如何将多字节编码转为utf8编码
    新建mfc项目时可选多字节编码(MBCS)或者unicode编码,而有些第三方库用到了utf8编码,此时需要进行编码转换。以下是将多字节编码转换成utf8的mfc代码,注意CP_ACP和CP_UTF8的使......
  • 力扣393(java)-UTF-8编码验证(中等)
    题目:给定一个表示数据的整数数组 data ,返回它是否为有效的UTF-8编码。UTF-8中的一个字符可能的长度为1到4字节,遵循以下的规则:对于1字节 的字符,字节的第一位......
  • 深入理解“字符编码模型”
    深入理解“字符编码模型”作者:哲思时间:2022.8.28邮箱:[email protected]:zhe-si(哲思)(github.com)前言最近踩坑了后端的文档生成,本想写篇相关的实践总结,忽然......
  • python中encode+decode编码解码
    encode()方法的语法格式:str.encode([encoding="utf-8"][,errors="strict"])decode()方法的语法格式:bytes.decode([encoding="utf-8"][,errors="strict"]) m="以心......
  • Base64编码
    用途我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的......
  • Apple开发_字符串与Unicode编码的互转
    //字符串转Unicode-(NSString*)utf8ToUnicode:(NSString*)string{NSUIntegerlength=[stringlength];NSMutableString*str=[NSMutableStringstrin......
  • VS2019修改文件编码
    1.查看文件编码安装扩展,FileEncoding,就可以在文件窗口右下角查看到该文件的编码方式,同时也可以直接在此处修改。2.修改项目的文件编码使用editorconfig文件。在工具......