zoukankan      html  css  js  c++  java
  • LeetCode——格雷编码

    Q:格雷码是一种二进制编码系统,如果任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)。
    给定一个非负整数n,表示代码的位数,打印格雷码的序列。格雷码序列必须以0开头。
    例如:给定n=2,返回[0,1,3,2]. 格雷码的序列为:
    00 - 0↵01 - 1↵11 - 3↵10 - 2
    注意:
    对于一个给定的n,格雷码的序列不一定是唯一的,
    例如:根据题目描述,[0,2,3,1]也是一个有效的格雷码序列
    A:
    1.(感谢@可乐猪)随着n变大,前面的数不用动,后面的数倒着拿出来再在首部加1即可

        public ArrayList<Integer> grayCode(int n) {
            ArrayList<Integer> array = new ArrayList<>();
            array.add(0);
            for (int i = 0; i < n; i++) {
                int high = 1 << i;
                for (int j = array.size() - 1; j >= 0; j--) {
                    array.add(high | array.get(j));
                }
            }
            return array;
        }
    

    2.G(i)=i^(i/2)(这个我没看懂为什么……)

        public ArrayList<Integer> grayCode(int n){
             ArrayList<Integer> result=new ArrayList<>();
             for(int i=0;i<1<<n;i++){
                    result.add(i^i>>1);//先算位移运算再算异或运算
              }
        }
    
  • 相关阅读:
    forkjoinpool
    json path
    如何处理json字符串
    ios如何快速转型安卓开发-专题3
    ios如何快速转型安卓开发-专题1
    framework创建及接入方式
    Cocoapods包管理
    cf 1102 B
    夜深人静写题解--杭电第五场
    夜深人静写题解--牛客第六场
  • 原文地址:https://www.cnblogs.com/xym4869/p/12533178.html
Copyright © 2011-2022 走看看