欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 国产亚洲成av人在线观看导航 | 成人在线免费网站 | 国产成人在线影院 | 无名者电影在线完整版免费 | 国产欧美在线观看视频 | 国产精品成人自拍 | 午夜久久久 | 色天天综合色天天碰 | 欧美三级三级三级爽爽爽 | 91麻豆精品国产91久久久更新资源速度超快 | 成人小视频在线观看免费 | 中文字幕日韩欧美一区二区三区 | 天堂在线v | 成人免费视频在线观看 | 日本久久久久久 | 日本高清免费不卡毛片 | 国产亚洲精品久久久久久打不开 | 六月婷婷久久 | 激情伊人网| 欧美日韩亚洲高清不卡一区二区三区 | 久久精品美女 | 欧美精品在线观看 | 国产精品成人一区二区1 | 自拍视频网 | 国产高清美女一级a毛片久久 | 亚洲日韩视频免费观看 | 亚洲影视在线 | 欧美成人一区二区三区 | 亚洲三级视频在线观看 | 三级毛片在线 | 91精品国产高清一区二区三区 | 香蕉久草在线 | 午夜宫电影| 欧美一区二区三区免费视频 | 国产精品成人在线 | 日韩欧美一区二区不卡 | 成人在线精品视频 | 亚洲精品免费观看 | 国产婷婷色综合AV蜜臀AV | 狠狠色噜噜狠狠狠狠黑人 | 波多野结衣xfplay在线观看 |