利用java-ArrayList生成格雷码

利用java中的ArrayList类递归实现格雷码的生成。
输入一个正整数n;
输出所有长度为n的格雷码位串列表。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class TangRongjie {
    //利用ArrayList生成格雷码
    public static ArrayList binaryReflectedGrayCode(int n) {
        ArrayList l1 = new ArrayList();
        //n为1,返回值包含位串0和1的l1
        if(n == 1) {
            l1.add("0");
            l1.add("1");
        }
        else {
            ArrayList l2 = new ArrayList();
            //递归调用生成长度为n-1的位串列表l1
            l1 = binaryReflectedGrayCode(n - 1);
            //将l1倒序后复制给l2
            Collections.addAll(l2, new String[l1.size()]);
            Collections.copy(l2, l1);
            Collections.reverse(l2);
            //把0加到表l1的每个位串之前
            for(int i = 0; i < l1.size(); i++)
                l1.set(i, "0" + l1.get(i));
            //把1加到表l2的每个位串之前
            for(int i = 0; i < l2.size(); i++)
                l2.set(i, "1" + l2.get(i));
            //将l2添加到l1的后面
            l1.addAll(l2);
        }
        return l1;
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        ArrayList l = new ArrayList();
        int n = in.nextInt();
        //调用算法
        l = binaryReflectedGrayCode(n);
        System.out.println(l.size());
        for(int i = 0; i < l.size(); i++)
            System.out.print(l.get(i) + " ");
        in.close();
    }
}

你可能感兴趣的:(利用java-ArrayList生成格雷码)