题解 | #生成格雷码#

生成格雷码

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;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-15 17:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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