【leetcode】格雷編碼

【leetcode】格雷編碼

題目:

格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng)瘸彤,在該系統(tǒng)中,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異笛钝。

給定一個(gè)代表編碼總位數(shù)的非負(fù)整數(shù) n质况,打印其格雷編碼序列。即使有多個(gè)不同答案玻靡,你也只需要返回其中一種结榄。

格雷編碼序列必須以 0 開頭。

示例 1:

輸入: 2
輸出:
[0,1,3,2]

解釋:
00 - 0
01 - 1
11 - 3
10 - 2

對(duì)于給定的 n囤捻,其格雷編碼序列并不唯一臼朗。
例如,
[0,2,3,1]
也是一個(gè)有效的格雷編碼序列蝎土。

00 - 0
10 - 2
11 - 3
01 - 1

示例 2:

輸入: 0
輸出:
[0]
解釋: 我們定義
格雷編碼序列必須以 0 開頭视哑。

給定
編碼總位數(shù)為
n 的格雷編碼序列,其長(zhǎng)度為 2n
誊涯。
當(dāng) n = 0 時(shí)挡毅,長(zhǎng)度為 20 = 1。
因此暴构,當(dāng) n = 0 時(shí)跪呈,其格雷編碼序列為 [0]。

思路:

編碼的規(guī)律取逾。什么規(guī)律呢耗绿?通過觀察我們可以發(fā)現(xiàn),格雷編碼是通過上一級(jí)的編碼得到的砾隅。也就是n個(gè)數(shù)的編碼可以通過n - 1個(gè)數(shù)的編碼得到误阻。

如果n = 1,那么編碼為[0, 1]晴埂;

n = 2堕绩,編碼為[00, 10, 11, 01];

n = 3邑时,編碼為[000, 100, 110, 010, 011, 111, 101, 001]奴紧;

所以,n級(jí)的編碼的生成晶丘,是從n - 1編碼的最后一個(gè)編碼開始倒序遍歷黍氮,每遍歷一個(gè)編碼,就將這個(gè)編碼+1后的碼字添加到結(jié)果列表的后面浅浮,然后再將這個(gè)編碼+0沫浆。

比如,n = 2滚秩,編碼為[00, 10, 11, 01]专执,倒序遍歷,得到:

01郁油,+1后生成新的碼字添加到后面本股,再對(duì)01+0攀痊,結(jié)果列表變成[00, 10, 11, 010, 011];

接著向前遍歷拄显,對(duì)11做與上一步相同的處理苟径,結(jié)果列表變成[00, 10, 110, 010, 011, 111];

最后躬审,結(jié)果列表變?yōu)閇000, 100, 110, 010, 011, 111, 101, 001]棘街。這樣生成的編碼就是符合格雷編碼條件的。也就是說(shuō)承边,n級(jí)格雷編碼是由n - 1級(jí)格雷編碼生成的遭殉,這是很典型的遞歸思想。

最后博助,把二進(jìn)制的字符轉(zhuǎn)換成十進(jìn)制整數(shù)就行险污。

根據(jù)這種規(guī)律,保持首位1不變翔始,后面的位依次前一位異或即可罗心。

比如n = 2,初始化res=[0]

i = 0時(shí),change = 1 << 0 = 1城瞎。cur = 1-1 = 0, res.get(0) ^ change = 1, res.add(1)渤闷。此時(shí)res = [0,1]。

i = 1時(shí),change = 1 << 1 = 2脖镀。cur = 2-1 =1, res.get(1)^change = 1^2 = 3,res.add(3)飒箭。

cur = 0, res.get(0)^change = 0^2 = 2,res.add(2)。

java代碼:

class Solution {
    public List<Integer> grayCode(int n) {
        List<Integer> res = new ArrayList<>();
        res.add(0);
        int cur;
        for(int i=0;i<n;i++){
            int change = 1 << i;
            cur = res.size()-1;
            while(cur >= 0){
                res.add(res.get(cur)^change);
                cur--;
            }
        }
        return res;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜒灰,一起剝皮案震驚了整個(gè)濱河市弦蹂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌强窖,老刑警劉巖凸椿,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異翅溺,居然都是意外死亡脑漫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門咙崎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)优幸,“玉大人,你說(shuō)我怎么就攤上這事褪猛⊥耍” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碳却。 經(jīng)常有香客問我队秩,道長(zhǎng),這世上最難降的妖魔是什么追城? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任刹碾,我火速辦了婚禮燥撞,結(jié)果婚禮上座柱,老公的妹妹穿的比我還像新娘。我一直安慰自己物舒,他們只是感情好色洞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冠胯,像睡著了一般火诸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荠察,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天置蜀,我揣著相機(jī)與錄音,去河邊找鬼悉盆。 笑死盯荤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焕盟。 我是一名探鬼主播秋秤,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脚翘!你這毒婦竟也來(lái)了灼卢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤来农,失蹤者是張志新(化名)和其女友劉穎鞋真,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沃于,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涩咖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揽涮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抠藕。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒋困,靈堂內(nèi)的尸體忽然破棺而出盾似,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布零院,位于F島的核電站溉跃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏告抄。R本人自食惡果不足惜撰茎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望打洼。 院中可真熱鬧龄糊,春花似錦、人聲如沸募疮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阿浓。三九已至他嚷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芭毙,已是汗流浹背筋蓖。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留退敦,地道東北人粘咖。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苛聘,于是被迫代替她去往敵國(guó)和親涂炎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 題目:格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng)设哗,在該系統(tǒng)中唱捣,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異。 給定一個(gè)代表編碼總位數(shù)的非負(fù)整...
    minningl閱讀 115評(píng)論 0 0
  • 89 Gray Code 格雷編碼 Description:The gray code is a binary n...
    air_melt閱讀 176評(píng)論 0 1
  • 題目: 格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng)网梢,在該系統(tǒng)中震缭,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異。 給定一個(gè)代表編碼總位數(shù)的非負(fù)...
    answerLDA閱讀 364評(píng)論 0 1
  • 題目描述:格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng)战虏,在該系統(tǒng)中拣宰,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異。給定一個(gè)代表編碼總位數(shù)的非負(fù)...
    MrHitchcock閱讀 181評(píng)論 0 0
  • 久違的晴天烦感,家長(zhǎng)會(huì)巡社。 家長(zhǎng)大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了手趣。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)晌该。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,495評(píng)論 16 22