格雷码生成
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(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 }