亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2021 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视频精品国在线视频艾草 | 全黄一级裸片视频免费 | 国产成人精品日本亚洲网站 | 亚洲手机中文字幕 | 亚洲欧美日韩高清一区二区一 | 亚洲国产人成在线观看 | 国产精品免费看久久久香蕉 | 香蕉亚洲欧洲在线一区 | 中国特级黄一级真人毛片 | 狠狠亚洲丁香综合久久 | 男人的天堂视频在线 | 亚洲欧美综合国产精品一区 | 欧美国产精品日韩在线 | 成人午夜大片免费视频77777 | 台湾佬中文娱乐2222vvv | 国产一区二区三区影院 | 天天躁狠狠躁夜躁2021 | 美女很黄很黄免费的 | 色视频亚洲| 国产l精品国产亚洲区在线观看 | 91精品国产欧美一区二区 | 猫咪视频成人永久免费观看 | 免费国产a | 四虎在线永久免费观看 | 日韩欧美一级毛片精品6 | 亚洲高清网站 | 深夜成人| 国产 在线 | 日韩 | 亚洲综合视频 | 手机看片福利视频 | 国产成人99精品免费观看 | www.99色.com| 免费日b视频 | 国产成人综合久久精品红 | 国产精品手机网站 | 新26uuu在线亚洲欧美 | 青草在线视频 |