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);
            }
        }
    };
  • 相关阅读:
    创建文件并写入内容
    java自动压缩文件并加密
    Java自动发送带图片邮件(带附件)
    eclipse正则表达式搜索
    解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    spring整合mybatis(原始dao和mapper代理两种方式)
    (解决)mysql1366中文显示错误的终极解决方案
    pdf合并、拆分工具
    ScheduledExecutorService定时方法
    json数据包含特殊字符解析失败
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6685599.html
Copyright © 2011-2022 走看看