zoukankan      html  css  js  c++  java
  • 89. 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.

     解法1 dp+非位运算

      规律:

    public class Solution {
        public List<Integer> grayCode(int n) {
            if(n == 0) {
                List<Integer> l1 = new ArrayList<>();
                l1.add(0);
                return l1;
            }
            List<List<String>> list = new ArrayList<>();
            List<String> l1 = new ArrayList<>();
            List<Integer> res = new ArrayList<>();
            l1.add("0");
            l1.add("1");
            list.add(l1);
            for(int i = 1 ; i < n ; i++){
                List<String> member = list.get(i-1);
                List<String> next = new ArrayList<>();
                for(String s : member){
                    String newS = "0"+ s;
                    next.add(newS);
                }
                
                for(int j = member.size() -1 ; j >= 0; j--){
                    String newS = "1"+ member.get(j);
                    next.add(newS);
                }
                list.add(next);
            }
             List<String> l = list.get(n-1);
             for(String str : l){
                 res.add(getValueofBit(str));
             }
             return res;
        }
        public int getValueofBit(String s){
            int res = 0;
            for(int i = 0 ; i < s.length() ; i++){
                res += Math.pow(2, s.length()-1-i) * (s.charAt(i) -'0');
            }
            return res;
        }
    }

    bit运算

    public class Solution {
        public List<Integer> grayCode(int n) {
            int count = (int) Math.pow(2, n);
            List<Integer> res = new ArrayList<>();
            for(int i = 0; i < count ; i++){
                res.add(i ^ (i >> 1));
            }
            return res;
        }
    }
  • 相关阅读:
    云中树莓派(5):利用 AWS IoT Greengrass 进行 IoT 边缘计算
    乐观锁 与 悲观锁 来解决数据库并发问题
    Python二维数组构造
    一次问题追查----短字符串签名算法引发的bug
    C++ assert 断言使用
    并查集(Union-Find)算法
    linux shell grep/awk/sed 匹配tab
    C++ 变量默认初始值不确定(代码测试)
    linux 查看机器内存方法 (free命令)
    html table奇偶行颜色设置 (CSS选择器)
  • 原文地址:https://www.cnblogs.com/joannacode/p/6105896.html
Copyright © 2011-2022 走看看