【发布时间】:2020-12-26 12:36:52
【问题描述】:
在第一行,我们写一个 0。现在在接下来的每一行中,我们查看前一行,并将每次出现的 0 替换为 01,并将每次出现的 1 替换为 10。
给定第 N 行和索引 K,返回第 N 行中的第 K 个索引符号。(K 的值是 1 索引的。)(1 索引)。
示例: 输入:N = 1,K = 1 输出:0
输入:N = 2,K = 1 输出:0
输入:N = 2,K = 2 输出:1
输入:N = 4,K = 5 输出:1
说明: 第 1 行:0 第 2 行:01 第 3 行:0110 第 4 行:01101001
问题链接: https://leetcode.com/explore/learn/card/recursion-i/253/conclusion/1675/
解决方案:
class Solution {
public:
int kthGrammar(int N, int K) {
if(N==0||K==0)
return 0;
string result="0";
string finals;
int i,j;
for(j=0;j<N-1;j++)
{
for(i=0;i<result.length();i++)
{
if(result[i]=='0')
finals.append("01");
else
finals.append("10");
}
result=finals;
}
return result[K-1]-'0';
}
};
【问题讨论】:
-
C 标签已移除。请注意,C 和 C++ 是不同的语言。
-
对于您的代码,我希望 TLE 而不是失败的测试用例。请仔细检查。
-
在循环的每次迭代中打印
result。将您的 N=4、K=5 与示例进行比较。 -
既然 OP 已经接受了答案,让我提一下 stackoverflow.com/questions/109023/… 我认为这是最快的方法,以防 TLE 成为下一个问题。
-
关于效率:查看第一行,并尝试将结果依赖于 K 的二进制表示,假设 K 的索引为零。
标签: c++ algorithm recursion data-structures