leetcode779 第k個語法符號。

2022-07-25 11:36:08 字數 768 閱讀 1903

直接找規律。

第一行 0

第二行 01

第三行 0110

第四行 01101001

可以發現,第n行的數量比第n-1行多了一倍,並且前半部分是和第n-1行一樣的,後半部分是前半部分「按位取反」得到的。

第n行的字元數量是2(n-1)個,因此第n-1行的數量就是2(n-2)個。公式為:

func(n,k) = func(n-1,k), if k <= 2^(n-2)

func(n,k)= ^func(n-1,k-2^(n-2)), if k >2^(n-2)

寫了如下的**:

class solution else

}};

**報錯,問題在哪?

問題就在於,c++沒有求冪的運算子,所以你用2^(n-2)是錯誤的。得到的結果還是2。

c++求冪只能用pow(x,y),c++中的^是按位異或運算符號。

使用pow(x,y)用math.h標頭檔案。

還有什麼問題?

如果第二種情況,求到的是0,就應該返回1,求到的是1就應該返回0.使用~表達為什麼會錯?

不能用運算子來計算0和1,因為得到的並不是0和1的相反。實際用c++求的時候0是-1,~1是-2.

參考 那要怎麼辦? 使用三目運算子。

如果返回的結果是0,就換為1,如果返回的結果是1,就返回0.

class solution else

}};

LeetCode779 第K個語法符號

在第一行我們寫上乙個0。接下來的每一行,將前一行中的0替換為01,1替換為10。給定行數n和序數k,返回第n行中第k個字元。k從1開始 例子 輸入 n 1,k 1輸出 0輸入 n 2,k 1輸出 0輸入 n 2,k 2輸出 1輸入 n 4,k 5輸出 1解釋 第一行 0 第二行 01 第三行 011...

LeetCode 779 第K個語法符號

在第一行我們寫上乙個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。給定行數 n 和序數 k,返回第 n 行中第 k個字元。k從1開始 例子 輸入 n 1,k 1 輸出 0 輸入 n 2,k 1 輸出 0 輸入 n 2,k 2 輸出 1 輸入 n 4,k 5 輸出 1 解釋 第一行 0...

leetcode 779 第K個語法符號

在第一行我們寫上乙個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。給定行數 n 和序數 k,返回第 n 行中第 k個字元。k從1開始 例子 輸入 n 1,k 1 輸出 0 輸入 n 2,k 1 輸出 0 輸入 n 2,k 2 輸出 1 輸入 n 4,k 5 輸出 1 解釋 第一行 0...