题目描述

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

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

测试样例:
1
返回:["0","1"]

代码如下:

 package com.yzh.xuexi;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class GeLeiMa {
 
    public static void main(String[] args) {
        Scanner scanner =new  Scanner(System.in);
        while (scanner.hasNext()) {
            int n=Integer.valueOf(scanner.nextLine());
            List<String>list1=new  ArrayList<>((int)Math.pow(2, n));
            List<String>list2=new  ArrayList<>((int)Math.pow(2, n));
            List<String>result=geLeiMa(n, list1, list2);
            StringBuilder stringBuilder=new StringBuilder((int)(Math.pow(2, n)*(n+3)+2));
            stringBuilder.append("[");
            for(String temp:result){
                stringBuilder.append("\"");
                stringBuilder.append(temp);
                stringBuilder.append("\",");
            }
            stringBuilder.delete(stringBuilder.length()-1, stringBuilder.length());
            stringBuilder.append("]");
            System.out.println(stringBuilder.toString());
        }
        scanner.close();
    }
 
    private static List<String> geLeiMa(int  n,List<String> list1,List<String> list2){
        //递归出口
        if (n==1) {
            list1.add("0");
            list1.add("1");
            return list1;
        }
        //递归求n-1位的格雷码
        list1=geLeiMa(n-1,list1,list2);
        //根据n-1位的格雷码求n位的格雷码
        //比如求n=3的gray码,首先知道n=2的gray码是(00,01,11,10)
        //那么n=3的gray码其实就是对n=2的gray码首位添加0或1生成的,添加0后变成(000,001,011,010)
        //添加1后需要顺序反向就变成(110,111,101,100)
        //组合在一起就是(000,001,011,010,110,111,101,100)
 
        for(String temp:list1){
            list2.add("0"+temp);
        }
        for(int i=list1.size()-1;i>=0;i--){
            list2.add("1"+list1.get(i));
        }
        list1.clear();
        list1.addAll(list2);
        list2.clear();
 
        return  list1;
    }
 
}

解题(GeLeiMa -生成格雷码)的更多相关文章

  1. 产生n位元的所有格雷码

    原文链接:http://blog.csdn.net/beiyeqingteng/article/details/7044471 问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集 ...

  2. 1081: [SCOI2005]超级格雷码

    1081: [SCOI2005]超级格雷码 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 301  Solved: 159[Submit][Statu ...

  3. C语言输出格雷码

    格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0开始生成 ...

  4. 格雷码Gray Code详解

    格雷码简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码.格 ...

  5. 构建n位元的格雷码

    二进制格雷码的生成 1.什么是格雷码 Gray Code是一个数列集合,每个数使用二进制来表示,假设使用n位元来表示每个数字,那么任两个数之间只有一个位元值不同.log2(16)=4 例如: 生成4位 ...

  6. LeetCode 格雷码序列的生成

    问题概述:在一组数的编码中,若随意两个相邻的代码仅仅有一位二进制数不同.则称这样的编码为格雷码. 2位数的格雷码序列:00 : 001 : 111 : 310 : 2找规律:假设要求n位的格雷码,先要 ...

  7. 格雷码(Grey Code)生成规则

    (1) Grey码在FPGA实际应用中是实用的码,在8421BCD码累加计数器中,如果寄存器需要发生多位(两位或者以上)的跳变,会出现中间态,这样作为组合逻辑的输入是不稳妥的. 下面看两个中间态的例子 ...

  8. leetCode 89.Gray Code (格雷码) 解题思路和方法

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  9. 【解题报告】CSP2019-S D1T1 格雷码

    题目链接:https://www.luogu.org/problem/P5657 话说这道题怎么是道橙题啊. 基本思路 因为n位格雷码的前2n-1位就是n-1位格雷码前面加了一位‘0’,所以可以把它们 ...

随机推荐

  1. matlab学习(4) any 和cellfun用法

    1.对于向量来说,只要包含非0元素,则返回为1: 2.对于矩阵来说,any(X)依次判断X的每一列是否为ture,返回一个含0或1的向量. 3.any(X,DIM)对X的第DIM维操作, DIM=1即 ...

  2. centOS连接没问题,使用SecureCRT就不能连接

    原因: 将NAT模式改为自定义的模式即可:

  3. 常见模块(五) random模块

    random随机函数中的常用方法 1.random.random 返回一个介于左闭右开[0.0, 1.0)区间的浮点数 print(random.random()) 2.random.randrang ...

  4. jdk1.7安装和配置

    jdk1.7 安装引用 https://jingyan.baidu.com/article/ff41162596a77912e4823716.html

  5. spring mvc 为什么这么多xml

    spring web mvc 处理流程 Architecture web.xml (webapp必要配置) 作用:spring web mvc 使用dispatcherServlet 分发reques ...

  6. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

  7. json序列化时定制支持datetime类型,和到中文让他保留中文形式

    json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型 自定义时间序列化转换器 import json from json import JSONEncoder from dat ...

  8. Excel函数之sumifs应用

    这个函数是用来进行多条件求和的一个函数 示例:根据表格求出“鼎盛书店”2012年度所有图书小计的总和,这里就用sumifs计算 首先定位结果输出单元格,祭出函数. sum_range参数就是筛选后需要 ...

  9. react学习笔记1一基础知识

    1.React 是一个用于构建用户界面的 JAVASCRIPT 库2.React 特点: a.声明式的设计 b.采用虚拟dom,最大限度的减少dom操作 C.组件化,可以复用 D.单向响应的数据流,减 ...

  10. javascript mqtt 发布订阅消息

    js client使用paho-mqtt,官网地址:http://www.eclipse.org/paho/,参考http://www.eclipse.org/paho/clients/js/官网给出 ...