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

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

系統 1746 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條評論
主站蜘蛛池模板: 亚洲视频在线一区 | 成人国产激情福利久久精品 | 老司机午夜性大片 | 日韩一级精品视频在线观看 | 欧美在线一级毛片观看 | 操操干 | 色天使久久综合网天天 | 一级毛片特级毛片黄毛片 | 奇米影视7777久久精品 | 国产97色在线 | 亚洲 | 国产综合欧美 | 美女视频黄视大全视频免费网址 | 日日碰日日摸日日澡视频播放 | 国产h版大片在线播放 | 亚洲网站在线看 | 欧美国产成人一区二区三区 | 成年女人色毛片 | 亚洲欧美综合网站 | 97免费观看 | 久久精品一区二区影院 | 香蕉在线视频网站 | 欧美九九 | 国产特级毛片aaaaaaa高清 | 国产欧美一区二区久久 | 性欧美高清久久久久久久 | 韩日视频在线观看 | 九九99国产精品视频 | 国产一区二区久久精品 | 国产精品探花一区在线观看 | 天天综合天天射 | 久久爱992xxoo | 亚洲免费成人在线 | 特黄特级a级黄毛片免费观看多人 | 日日干狠狠操 | 色综合网亚洲精品久久久 | 特黄特级高清免费视频毛片 | 色狠狠一区 | 亚洲高清一区二区三区 | 久久久久久97 | 国产成人精品免费视频大全五级 | 国产精品久久国产精麻豆99网站 |