欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

格雷碼 Java python c++ C# 解法 原理講解

系統 1822 0

例子:??

            以下是2位序列(n = 2)
   00 01 11 10
以下是3位序列(n = 3)
   000 001 011 010 110 111 101 100
以下是4位序列(n = 4)
   0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 
   1110 1010 1011 1001 1000 
          

可以使用以下步驟從(n-1)位格雷碼列表生成n位格雷碼。?
1?? 令(n-1)位格雷碼列表為L1。?創建另一個與L1相反的列表L2。?
2? 通過在L1的所有代碼中加上前綴“0”來修改列表L1。?
3?? 通過在L2的所有代碼中加上前綴“1”來修改列表L2。?
4?? 連接L1和L2。?連接列表是n位格雷碼的必需列表。

例如,以下是從2位格雷碼列表中生成3位格雷碼列表的步驟。?
L1 = {00,01,11,10}(2位格雷碼列表)?
L2 = {10,11,01,00}(L1的反向)?
用“0”前綴L1的所有條目,L1變為{000,001,011,010}?
用“1”前綴L2的所有條目,L2變為{110,111,101,100}?
連接L1和L2,得到{000,001,011,010,110,111,101,100}

?

為了生成n位格雷碼,我們從1位格雷碼列表開始。?1位格雷碼的列表是{0,1}。?我們重復上述步驟,從1位格雷碼生成2位格雷碼,然后從2位格雷碼生成3位格雷碼,直到位數等于n。?以下是這種方法的實施。?

解法思想為分治法

java解法

import java.util.*;

? class GfG {

?

static void generateGrayarr( int n)

{

???? // base case

???? if (n <= 0 )

???????? return ;

?

???? // 'arr' will store all generated codes

???? ArrayList arr = new ArrayList ();

?

???? //初始一位存入

???? arr.add( "0" );

???? arr.add( "1" );

?

???? // Every iteration of this loop generates 2*i codes from previously

???? // generated i codes.

???? int i, j;

???? for (i = 2 ; i < ( 1 < 1 )

???? {

???????? ? //反轉后存入

???????? for (j = i- 1 ; j >= 0 ; j--)

???????????? arr.add(arr.get(j));

?

???????? //L1前加0

???????? for (j = 0 ; j < i ; j++)

???????????? arr.set(j, "0" + arr.get(j));

?

???????? //L2前加1

???????? for (j = i ; j < 2 *i ; j++)

???????????? arr.set(j, "1" + arr.get(j));

???? }

?

???? // 輸出

???? for (i = 0 ; i < arr.size() ; i++ )

???????? System.out.println(arr.get(i));

}

?

// 測試

public static void main(String[] args)

{

???? generateGrayarr( 3 );

}

}

?

C++解法

void generateGrayarr( int n)

{

????

???? if (n <= 0)

???????? return ;

?

???? vector arr;

?

???? arr.push_back( "0" );

???? arr.push_back( "1" );

?

????

???? int i, j;

???? for (i = 2; i < (1<

???? {

? ? ? ? //反轉

???????? for (j = i-1 ; j >= 0 ; j--)

???????????? arr.push_back(arr[j]);

? ? ? ? //L1前加0

???????? for (j = 0 ; j < i ; j++)

???????????? arr[j] = "0" + arr[j];

? ? ? ?//L2前加1

???????? for (j = i ; j < 2*i ; j++)

???????????? arr[j] = "1" + arr[j];

???? }

?

???? // 輸出

???? for (i = 0 ; i < arr.size() ; i++ )

???????? cout << arr[i] << endl;

}

?//測試

int main()

{

???? generateGrayarr(3);

???? return 0;

}

?

python解法

?

def generateGrayarr(n):

?

???? # base case

???? if (n < = 0 ):

???????? return

?

???? # 'arr' will store all generated codes

???? arr = list ()

?

???? # start with one-bit pattern

???? arr.append( "0" )

???? arr.append( "1" )

?

???? # Every iteration of this loop generates

???? # 2*i codes from previously generated i codes.

???? i = 2

???? j = 0

???? while ( True ):

?

???????? if i > = 1 << n:

???????????? break

?????

???????? # Enter the prviously generated codes

???????? # again in arr[] in reverse order.

???????? # Nor arr[] has double number of codes.

???????? for range j (i - 1 , - 1 , - 1 ):

???????????? arr.append(arr[j])

?

???????? # append 0 to the first half

???????? for range j (i):

???????????? arr[j] = "0" + arr[j]

?

???????? # append 1 to the second half

???????? for range j (i, 2 * i):

???????????? arr[j] = "1" + arr[j]

???????? i = i << 1

?

???? # prcontents of arr[]

???? for range i ( len (arr)):

???????? print (arr[i])

?

# Driver Code

generateGrayarr( 3 )

?

C#解法

?

using System;

using System.Collections.Generic;

?

// C# program to generate n-bit Gray codes

public class GfG

{

?

// This function generates all n bit Gray codes and prints the

// generated codes

public static void generateGrayarr( int n)

{

???? // base case

???? if (n <= 0)

???? {

???????? return ;

???? }

?

???? // 'arr' will store all generated codes

???? List< string > arr = new List< string > ();

?

???? // start with one-bit pattern

???? arr.Add( "0" );

???? arr.Add( "1" );

?

???? // Every iteration of this loop generates 2*i codes from previously

???? // generated i codes.

???? int i, j;

???? for (i = 2; i < (1 << n); i = i << 1)

???? {

???????? // Enter the prviously generated codes again in arr[] in reverse

???????? // order. Nor arr[] has double number of codes.

???????? for (j = i - 1 ; j >= 0 ; j--)

???????? {

???????????? arr.Add(arr[j]);

???????? }

?

???????? // append 0 to the first half

???????? for (j = 0 ; j < i ; j++)

???????? {

???????????? arr[j] = "0" + arr[j];

???????? }

?

???????? // append 1 to the second half

???????? for (j = i ; j < 2 * i ; j++)

???????? {

???????????? arr[j] = "1" + arr[j];

???????? }

???? }

?

???? // print contents of arr[]

???? for (i = 0 ; i < arr.Count ; i++)

???? {

???????? Console.WriteLine(arr[i]);

???? }

}

?

// Driver program to test above function

public static void Main( string [] args)

{

???? generateGrayarr(3);

}

}

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲激情成人 | 奇米影视第 | 深夜福利一区二区 | 四虎国产在线 | 久久精品国产99国产精品澳门 | 5060网午夜 | 91精品观看91久久久久久 | 免费播放特黄特色毛片 | 天天干夜夜笙歌 | 国产精品久久久久久免费 | 免费中文字幕 | 91视频完整版 | 91视频这里只有精品 | 一级做a爱片久久 | 婷婷色综合 | 999精品久久久 | 国产成人99久久亚洲综合精品 | 性猛交ⅹxxx乱巴西 无人精品乱码一区二区三区 | 久久综合九色综合欧美狠狠 | 这里只有精品在线视频观看 | 久久免费在线视频 | 日韩h片在线观看 | 四虎1515hh海外永久免费在线 | 亚洲一级在线观看 | 九九精品激情在线视频 | 亚洲欧美中文字幕 | 理论片午午伦夜理片在线播放 | 欧美综合精品 | 欧美日韩在线看 | 国产精品v欧美精品v日韩精品 | 国产成人91高清精品免费 | 美美女高清毛片视频免费观看 | 久久精品国产免费看久久精品 | 色婷婷久久 | 91成人影院未满十八勿入 | 无码色情影片视频在线看免费 | 日韩久久久久久 | 欧美福利一区二区三区 | 国内自拍一二三四2021 | 香蕉久久久| 国产片翁熄系列乱在线视频 |