利用java中的ArrayList类递归实现格雷码的生成。
输入一个正整数n;
输出所有长度为n的格雷码位串列表。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class TangRongjie {
//利用ArrayList生成格雷码
public static ArrayList<String> binaryReflectedGrayCode(int n) {
ArrayList<String> l1 = new ArrayList<String>();
//n为1,返回值包含位串0和1的l1
if(n == 1) {
l1.add("0");
l1.add("1");
}
else {
ArrayList<String> l2 = new ArrayList<String>();
//递归调用生成长度为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<String> l = new ArrayList<String>();
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();
}
}
网友评论