zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]Gray Code

    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.

    https://leetcode.com/problems/gray-code/


    直接用格雷码转换的公式,右移一位与自身异或。

    使用dfs得到符合题意的答案,但答案只接受格雷码的顺序,而且大数据用dfs会超时。

     1 /**
     2  * @param {number} n
     3  * @return {number[]}
     4  */
     5 var grayCode = function(n) {
     6     var len = Math.pow(2, n), res = [];
     7     for(var i = 0; i < len; i++)
     8         res.push(i ^ (i >> 1));
     9     return res;
    10 }

    DFS,顺序不对不能AC。

     1 /**
     2  * @param {number} n
     3  * @return {number[]}
     4  */
     5 var grayCode_WA = function(n) {
     6     if(n === 0) return [0];
     7     var i, map = [], visited = {}, len = Math.pow(2, n);
     8     for(i = 0; i < n; i++)
     9         map[i] = 0;
    10     visited[map.join("")] = true;
    11     return dfs(map, [0]);
    12 
    13     function dfs(map, res){
    14         if(res.length === len)
    15             return res;
    16         var key = "", tmp;
    17         for(var i = 0; i < n; i++){
    18             map[i] === 0 ? map[i] = 1 : map[i] = 0;
    19             key = map.join("");
    20             if(!visited[key]){
    21                 visited[key] = true;
    22                 res.push(parseInt(key, 2));
    23                 tmp = dfs(map, res);
    24                 if(tmp) return tmp;
    25                 res.pop();
    26                 visited[key] = false;
    27             }
    28             map[i] === 0 ? map[i] = 1 : map[i] = 0;
    29         }
    30         return false;
    31     }
    32 };
  • 相关阅读:
    第二个冲刺
    实验四主存空间的分配和回收
    Sprint总结
    Sprint回顾
    Scrum项目5.0
    hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
    获得HttpServletResponse及其他对象
    UUID.randomUUID()方法介绍
    psp个人软件过程需求文档
    电子产品自动搜索比价系统设计与实现 项目愿景与范围
  • 原文地址:https://www.cnblogs.com/Liok3187/p/5248356.html
Copyright © 2011-2022 走看看