格雷码生成

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

算法:

类似对于n=2来说:00,01,11,10

要想生成n=3的格雷码可在n=2的前面加上0或1当加上0后

000,001,011,010.

加上1.100,101,111,110需要进行反转则

n=3为:000,001,011,010,110,111,101,100

实现:

 1 public Vector<String> getGray(int n){
 2         Vector<String>gray =new Vector<String>();
 3         if(n==1){
 4             gray.add("0");
 5             gray.add("1");
 6             return gray;
 7         }
 8         Vector<String>beforegray=getGray(n-1);
 9         for(int i=0;i<beforegray.size();i++){
10             gray.add("0"+beforegray.get(i));
11         }
12         for(int i=beforegray.size()-1;i>=0;i--){
13             gray.add("1"+beforegray.get(i));
14         }
15         return gray;
16     }
17     public static void main(String[]args){
18         Vector<String>answer=new Gray().getGray(3);
19         for(String mm:answer){
20             System.out.println(mm);
21         }
22     }

 

posted @ 2016-05-27 16:19  bounce  阅读(545)  评论(0编辑  收藏  举报