题解 | #生成格雷码#

生成格雷码

https://www.nowcoder.com/practice/50959b5325c94079a391538c04267e15

import java.util.*;

/**
 * QQ1 生成格雷码
 * @author d3y1
 */
public class GrayCode {
    /**
     * 模拟法
     *
     * 1位格雷码: 0 1
     * 2位格雷码: (0)0 (0)1    (1)1 (1)0
     * 3位格雷码: (0)00 (0)01 (0)11 (0)10    (1)10 (1)11 (1)01 (1)00
     * ...
     *
     * 算法:
     * n位格雷码 <== n-1位格雷码[加前缀0(顺序) + 加前缀1(逆序)]
     *
     * @param n
     * @return
     */
    public String[] getGray(int n) {
        if(n == 1){
            return new String[]{"0", "1"};
        }

        String[] preCodes = getGray(n-1);

        int size = preCodes.length;
        String[] codes = new String[size*2];
        
        for(int i=0; i<size; i++){
            // 加前缀0(顺序)
            codes[i] = "0"+preCodes[i];
            // 加前缀1(逆序)
            codes[size+i] = "1"+preCodes[size-i-1];
        }

        return codes;
    }
}

全部评论

相关推荐

柱柱想躺平:这是好事啊
点赞 评论 收藏
分享
owwhy:难,技术栈在嵌入式这块显得非常浅,并且简历有大问题。教育经历浓缩成两行就行了,写什么主修课程,说的不好听这块没人在意,自我评价删了,项目写详细点,最终简历缩成一页。相关技能怎么说呢,有点差了,还写成这么多行
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务