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

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

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

  • 递归思想
  • 第n位的格雷码是由n-1位组成的
  • 通过对第n-1位格雷码加“0”和加“1”组成的
  • 比如:
  • 第1位就是“0”,“1”
  • 第2位就给第1位的首位加“0”和加“1”,“00”“01”“11”“10”
  • 加1是从后往前加的原因是为了满足相邻两个只有一位不同的原则

代码示例:

import java.util.*;

public class GrayCode {
    public String[] getGray(int n) {
    
    	//递归的截至条件
        if(n == 1){
            return new String[]{"0","1"};
        }
        
        // 递归求n-1位的格雷码
        String[] s1 = getGray(n-1);
        String[] s2 = new String[s1.length*2];
        
        // 给s1首位加“0” 和 加”1“
        for(int i = 0;i<s1.length;i++){
            s2[i] = "0"+s1[i];
            s2[i+s1.length] = "1"+s1[s1.length-i-1];
        }
        return s2;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值