LeetCode 第八十九題 格雷編碼(Gray Code)
題目:
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。
給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。
解題:
- 首先,補充一下格雷碼的含義:在一組數的編碼中,若任意兩個相鄰的程式碼只有一位二進位制數不同,則稱這種編碼為格雷碼。例如,位數為2格雷碼的其中一個序列:00,01,11,10,它們任意兩個相鄰的數值,只有一個位數不同。
- 解題思路:如果我們書寫三位的格雷碼的一個序列:000,001,011,010,110,111,101,100。我們會發現一個奇怪的現象,前面四個數,跟後面四個數,第一位不同,後面剛好後四個數的順序是前四個數的逆序。通過查閱資料,可知,這是由於格雷碼是反射二進位制碼(
- 1位格雷碼有兩個碼字
- (n+1)位格雷碼中的前2n個碼字等於n位格雷碼的碼字,按順序書寫,加字首0
- (n+1)位格雷碼中的後2n個碼字等於n位格雷碼的碼字,按逆序書寫,加字首1
- n+1位格雷碼的集合 = n位格雷碼集合(順序)加字首0 + n位格雷碼集合(逆序)加字首1
import java.util.ArrayList;
import java.util.List;
public class N89_GrayCode {
private static List<Integer> grayCode(int n) {
List<Integer> list = new ArrayList<>();
// 給定編碼總位數為 n 的格雷編碼序列,其長度為 2n。
// 當 n = 0 時,長度為 2^0 = 1。
// 因此,當 n = 0 時,其格雷編碼序列為 [0]。
if (n == 0) {
list.add(0);
return list;
}
// 這裡獲得格雷碼的二進位制碼的形式,再將二進位制碼轉為數字
String[ ] temp = getGrayCode(n);
for (String a : temp
) {
list.add(Integer.parseInt(a, 2));
}
return list;
}
private static String[] getGrayCode(int n) {
String[] output = null;
// 一位的格雷碼有兩個
if (n == 1) {
output = new String[]{"0", "1"};
} else {
// 獲取(n - 1)位格雷碼
String[] temp = getGrayCode(n - 1);
output = new String[temp.length * 2];
for (int i = 0; i < temp.length; i++) {
// n位格雷碼集合(順序)加字首0
output[i] = "0" + temp[i];
// n位格雷碼集合(逆序)加字首1
output[temp.length * 2 - i - 1] = "1" + temp[i];
}
}
return output;
}
}
相關推薦
LeetCode 第八十九題 格雷編碼(Gray Code)
題目: 格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。 給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。 解題: 首先,補充一下格雷碼的含義:在一組數的編碼中,若任意兩個相鄰的程式碼只有一
【leetcode 簡單】 第八十九題 贖金信
第一個 div nbsp for 第一個字符 span counter map 註意 給定一個贖金信 (ransom) 字符串和一個雜誌(magazine)字符串,判斷第一個字符串ransom能不能由第二個字符串magazines裏面的字符構成。如果可以構成,返回 tru
【leetcode 簡單】 第五十九題 同構字符串
另一個 tco 保留 {} 簡單 urn code 映射 for 給定兩個字符串 s 和 t,判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t ,那麽這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換,同時保留字符的順序。兩個字符不能映射到同一個字符
【leetcode 簡單】 第八十七題 兩整數之和
turn div 計算 pre lee nbsp gets tco shu 不使用運算符 + 和-,計算兩整數a 、b之和。 示例: 若 a = 1 ,b = 2,返回 3。 class Solution: def getSum(self, a, b):
x的平方根(leetcode簡單篇第六十九題)
實現 int sqrt(int x) 函式。 計算並返回 x 的平方根,其中 x 是非負整數。 由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。 示例 1: 輸入: 4 輸出: 2 示例 2: 輸入: 8 輸出: 2 說明: 8
LeetCode刷題記錄——第六十九題(x的平方根)
題目描述 實現 int sqrt(int x) 函式。 計算並返回 x 的平方根,其中 x 是非負整數。 由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。 示例 1: 輸入: 4 輸出: 2 示例 2: 輸入: 8 輸出: 2
第八十六題(搜尋二叉樹建立)
如何編寫一個程式,把一個有序整數陣列放到二叉樹中? 分析:為了讓搜尋二叉樹的查詢等操作接近於O(log(n))。我們以有序陣列的中間位置的數字作為搜尋二叉樹的根節點,以其左半部分資料建立搜尋二叉樹作為根節點的左子樹。以其有半部分資料建立搜尋二叉樹作為根節點的右子樹。這是一個遞
“全棧2019”Java第八十九章:介面中能定義內部類嗎?
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第八十九章:介面中能定義內部類嗎? 下一章 “全棧2019”Java第九十章:內部類可以向上
學習淘淘商城第八十九課(單點登入之通過token獲取使用者資訊)
首先還是看介面文件關於通過token獲取使用者資訊的說明,如下圖所示。 看了說明文件我們便知道該怎麼做了,在taotao-sso-interface工程的UserService介面類中新增一個介面,如下圖所示。
《劍指offer》第四十九題(醜數)
醜數 exp 第一個 算法 ber 大於 offer return false // 面試題49:醜數 // 題目:我們把只包含因子2、3和5的數稱作醜數(Ugly Number)。求按從小到 // 大的順序的第1500個醜數。例如6、8都是醜數,但14不是,因為它
leecode第五十九題(螺旋矩陣 II)
code i++ 一行 emp src alt 初始化 圖片 gen class Solution { public: vector<vector<int>> generateMatrix(int n) {
LeetCode 89. 格雷編碼(C、C++、python)
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。 給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。 示例 1: 輸入: 2 輸出: [0,1,3,2] 解釋: 00 - 0 01 - 1
LeetCode——89. 格雷編碼(JavaScript)
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。 給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。 示例 1: 輸入: 2 輸出: [0,1,3,2] 解釋: 00 - 0 01 - 1 11 - 3 10 -
Leetcode 89:格雷編碼(超詳細的解法!!!)
格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。 給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。 示例 1: 輸入: 2 輸出: [0,1,3,2] 解釋: 00 - 0 01 - 1 11 - 3 10
第八屆藍橋杯大賽個人賽決賽(軟體類)真題 -----Java大學C組------樹形顯示
標題:樹形顯示對於分類結構可以用樹形來形象地表示。比如:檔案系統就是典型的例子。樹中的結點具有父子關係。我們在顯示的時候,把子項向右縮排(用空格,不是tab),並新增必要的連線線,以使其層次關係更醒目。下面的程式碼就是為了這個目的的,請仔細閱讀原始碼,並填寫劃線部分缺少的程式
第八屆藍橋杯大賽個人賽決賽(軟體類)真題 Java大學B組 答案
標題:平方十位數由0~9這10個數字不重複、不遺漏,可以組成很多10位數字。這其中也有很多恰好是平方數(是某個數的平方)。比如:1026753849,就是其中最小的一個平方數。請你找出其中最大的一個平方數是多少?注意:你需要提交的是一個10位數字,不要填寫任何多餘內容。答案:
第八屆藍橋杯大賽個人賽決賽(軟體類)真題 -----Java大學C組------數位和
標題:數位和數學家高斯很小的時候就天分過人。一次老師指定的算數題目是:1+2+...+100。高斯立即做出答案:5050!這次你的任務是類似的。但並非是把一個個的數字加起來,而是對該數字的每一個數位作累加。這樣從1加到100的“和”是:901從10加到15是:21,也就是:1
軟工實踐 - 第二十九次作業 Beta 衝刺(7/7)
隊名:起床一起肝活隊 組長部落格:https://www.cnblogs.com/dawnduck/p/10159251.html 作業部落格:[班級部落格本次作業的連結] (https://edu.cnblogs.com/campus/fzu/Grade2016SE/homework/2498) 組員情
【SpringCloud Greenwich版本】第八章:配置中心客戶端(config client)
一、SpringCloud版本 本文介紹的Springboot版本為2.1.1.RELEASE,SpringCloud版本為Greenwich.RC1,JDK版本為1.8,整合環境為IntelliJ IDEA 二、config client介紹 Spring Boot應用程式可以
第八屆藍橋杯 k倍區間(字首和)
標題: k倍區間 給定一個長度為N的數列,A1, A2, ... AN,如果其中一段連續的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍數,我們就稱這個區間[i, j]是