zoukankan      html  css  js  c++  java
  • 2016腾讯编程题:生成格雷码

    生成格雷码

    题目描述

    在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。

    给定一个整数n,请返回n位的格雷码,顺序为从0开始。

    测试样例:
    1
    返回:["0","1"]
    解题
    参考百度百科
    递归生成码表
    这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造:
    (1)1位格雷码有两个码字
    (2)(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
    (3)(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1 
    (4)n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1
    import java.util.*;
    
    public class GrayCode {
        public String[] getGray(int n) {
            // write code here
              if(n == 1){
                  return new String[]{"0","1"};
              }else{
                String[] temp = getGray(n-1);
                String[] result= new String[temp.length*2];
                for(int i = 0; i < temp.length;i++)
                    result[i] = "0"+temp[i];
                int i,j;
                for( i = 0, j = temp.length - 1; i < temp.length && j>= 0;i++,j--)
                    result[i+temp.length] = "1"+temp[j];
                return result;
            }
            
        }
    }
     
  • 相关阅读:
    CSS3中的3D效果
    JavaScript判断数据类型方法?
    JS函数中的arguments是什么?
    Vue组件之间通信的几种方式
    Vue插槽详解
    CSS文本溢出效果&滚动条样式设置
    Fibonacci数列计算的三种方法
    堆内存和栈内存详解[转]
    带头结点的单链表反转
    汉诺塔问题
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5386390.html
Copyright © 2011-2022 走看看