【LeetCode】 779. 第K個語法符號
阿新 • • 發佈:2018-11-08
遞迴
- 題目
在第一行我們寫上一個 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
第三行: 0110
第四行: 01101001
- 分析
將每一行寫出尋找規律:
n | |
---|---|
1 | 0 |
2 | 0 1 |
3 | 0 1 1 0 |
4 | 0 1 1 0 0 1 1 0 |
5 | 0 1 1 0 0 1 1 0 1 0 0 1 0 1 1 0 |
第n行:奇數位與n-1行相同;偶數位置與n-1相反
3. 程式碼
include <iostream>
using namespace std;
int kthGrammar(int N, int K)
{
if(N==1)
return 0;
else {
if(K%2==1){
return kthGrammar(N-1,K/2+1);
}
else
return !kthGrammar(N-1,K/2);
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
cout << kthGrammar(n,m) << endl;
}
return 0;
}
參考別人的演算法
class Solution {
public:
int kthGrammar(int N, int K) {
if(K==1) return 0;
if(K==2) return 1;
int res=0;
for(int i=N-2;i>=0;--i)
{
if(K>pow(2,i)) {K=K-pow(2,i);res=1-res;
}
return res;
}
};