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

    题目:Gray Code

    给定格雷码的位数,输出所有的格雷码对应的十进制数。

    思路:

    000 0

    001 1

    011 3

    010 2

    110 6

    111 7

    101 5

    100 4

    前四个和后四个的前两位对称,前两个和后两个的第一位是对称的。

    如此,可看出,格雷码有一定的对称性。

    package com.example.medium;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * 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.
     * @author FuPing
     *
     */
    public class GrayCode {
        private void getCode(List<Integer> list,int start,int end,int value){
            if(start == end){//第一个
                list.add(0, 0);
                return;
            }
            int mid = (start + end)/2;
            getCode(list, start, mid, value);//递归求前半部分
    
            for (int i = mid + 1; i <= end; i++) {//对称性
                list.add(i, list.get(end - i) + (end - start + 1)/2);
            }
        }
        public List<Integer> grayCode(int n) {
            int length = (int)Math.pow(2, n);
            List<Integer> list = new ArrayList<Integer>(length);
            getCode(list, 0, length - 1, 0);
    
            return list;
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println(new GrayCode().grayCode(7));
    
        }
    
    }
    class Solution {
    public:
        vector<int> grayCode(int n) {
            vector<int> codes;
            getGrayCode(codes, 0, pow(2, n));
            return codes;
        }
    private:
        void getGrayCode(vector<int> &grayCodes, int start, int length){
            if (length == 1){
                grayCodes.push_back(0);
                return;
            }
            getGrayCode(grayCodes,0,length/2);
            for (int i = length/2; i < length; i++)
            {
                grayCodes.push_back(grayCodes.at(length - i - 1) + length/2);
            }
        }
    };
  • 相关阅读:
    一个好用的,个人记事本应用,软件joplin
    aws EKS EFS 上安装mysql Operation notpermitted
    多变量的线性回归
    批量梯度下降BGD、随机梯度下降SGD和小批量梯度下降MBGD对比
    单变量线性回归
    数据库限制内存使用方法
    C# 调用 Excel 宏的方法
    Markdown 使用方法总结
    VBA注意事项
    将CSV文件中的数据导入到SQL Server 数据库中
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6685599.html
Copyright © 2011-2022 走看看