格雷碼問題

格雷碼問題:
對於給定的正整數n,格雷碼爲滿足如下條件的一個編碼序列:
(1) 序列由2n個編碼組成,每個編碼都是長度爲n的二進制位串。
(2) 序列中無相同的編碼。
(3) 序列中位置相鄰的兩個編碼恰有一位不同。
例如:n=1時的格雷碼爲:{0, 1}。
n=2時的格雷碼爲:{00, 01, 11, 10}。
n=3時的格雷碼爲:{000, 001, 011, 010,110,111,101,100}。
gray碼問題求解思想:
將一個規模n位gray碼序列表示爲G(n), G(n)以相反順序排列的序列表示爲G’(n)。則gray碼的構造規則即子問題的劃分規則爲:G(n+1)= 0G(n) 1G’(n) 。
gray碼問題代碼:G(n+1)= G(n) 0G’(n)1

這是用java實現
package digui;
import java.util.Scanner;
public class digui {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n=in.nextInt();
System.out.println("————————————————遞歸實現格雷碼問題————————————");
String[] strArr=GrayCode(n);
for(int i=0;i<strArr.length;i++)
{
System.out.println(strArr[i]);
}
}
public static String[] GrayCode(int n){
String[] grayCodeArr = new String[(int)Math.pow(2,n)];
if(n<1)
{
System.out.println("你輸入的格雷碼有錯誤!");
}
if(n==1)
{
grayCodeArr[0]="0";
grayCodeArr[1]="1";
return grayCodeArr;
}
String[] before = GrayCode(n-1);

    for(int i=0;i<before.length;i++){
        grayCodeArr[i]="0"+before[i];
        grayCodeArr[grayCodeArr.length-1-i]="1"+before[i];
    }
        return grayCodeArr;

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章