zoukankan      html  css  js  c++  java
  • LeetCode89:Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit.

    Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

    For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

    00 - 0
    01 - 1
    11 - 3
    10 - 2
    Note:
    For a given n, a gray code sequence is not uniquely defined.

    For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

    For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.


    解法一

    这道题感觉是一个找规律的题目,找到规律后就非常好求解,感觉不是一道回溯的题。


    对于n=2,它的结果包含n=1时的结果左边补零,以及逆序遍历n=1时的结果左边补1。
    规律例如以下图,列出了n=1,n=2,n=3时的情况。

    这里写图片描写叙述

    依据这个规律假设已知n=k的情况,那么n=k+1的结果包含对n=k的结果左边补零,即保存不变。然后逆序遍历n=k的结果左边补1就可以。
    runtime:4ms

    class Solution {
    public:
    
        vector<int> grayCode(int n) {
            vector<int> result(1);
            for(int i=0;i<n;i++)
            {
                    for(int j=result.size()-1;j>=0;j--)
                    {
                       result.push_back((1<<i)+result[j]);
                    }
            }
            return result;
        }
    }。
    

    解法二

    解法二就涉及到gray code的数学知识了。要是知道这个数学知识。能够在几分钟之内就解出这道题。
    格雷码能够由相应的十进制数求出:grayCode=i^i>>1
    runtime:4ms

    class Solution {
    public:
         vector<int> grayCode(int n) {
             vector<int> result;
             for(int i=0;i<1<<n;i++)
             {
                 result.push_back(i^i>>1);
             }
             return result;
         }
    
    };
  • 相关阅读:
    个人作业——软件工程实践总结作业
    用户调查报告
    β总结
    凡事预则立
    学习进度条
    作业八——单元测试练习(个人练习)
    作业七——“南通大学教务管理系统微信公众号” 用户体验分析
    作业六——团队作业(学生成绩录入系统设计与实现)
    作业5——需求分析(学生成绩录入系统)
    作业4.2:结对项目—— 词频统计(第二阶段)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5374990.html
Copyright © 2011-2022 走看看