由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode上 decode ways 那一题 running time error
相关主题
求助各位大牛:LeetCode的Decode WaysDP的状态转移方程
一刀题decode ways follow up string 里面有* 怎么修改代码?
I want to hear your explaination of this solution of decode ways.脸书的高频题decode ways的follow up怎么解
Docode 问题facebook面经
问一道Google的题腐败面经
Hackercup: Squished Status & LeetCode: Decode WaysF电面
G家电题FB很容易的电面跪了(自我感觉coding没问题),是怎么回事
F电面facebook 面经
相关话题的讨论汇总
话题: int话题: dp话题: len话题: return话题: first
进入JobHunting版参与讨论
1 (共1页)
h********o
发帖数: 14
1
http://www.leetcode.com/onlinejudge 进入这个链接, 搜索 页面上“decode ways”就能找到题目。leetcode 大侠对题目的表达很清楚, 为了避免表达不清造成歧义,就不转述了
我觉得是个较为简单的DP,先列举出最后只剩一个字符,和两个字符的情况,然后往前推
代码如下:
int numDecodings(string s) {
int l = s.size();
vector r(l,0);
r[l-1] = 1;
if ((s[l-2]-'0')*10+s[l-1]-'0' <= 26) r[l-2] = 2;
else r[l-2] = 1;
for (int i = l-3; i>=0; i--) {
r[i] = r[i+1];
if ((s[i]-'0')*10+s[i+1]-'0' <= 26)
r[i] = r[i] + r[i+2];
}
return r[0];
}
但是leetcode online judge说是 running time error, 不知道哪里出了问题,还是
我想的不对,或者有比O(n)跟好的算法, 请版上各位大侠指教,非常感谢
p********s
发帖数: 37
2
可能l可以为0的。。这样r[l-1]就挂了。。
b**a
发帖数: 1118
3
My code passed the small test but failed big test. Can anyone take a look
and suggest the reason? Thanks.
int numDecodings(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(s.size()==0)
return 0;

char first, second;
first=s[0];
if((first-'0')==0)
return 0;

int len= s.size();
int count=1;

for(int i=1; i {
char second=s[i];
if(second=='0')
{
if(0==(first-'0')||(first-'0')>2)
return 0;
else
{
if(count>1)count--;
}

}
else//second is not 0
{
if(((first-'0')<=2 && (first-'0')>0) && (second-'0')<=6 )
{
count++;
}
}
first=second;

}
return count;

}
p*****2
发帖数: 21240
4
我写了一个练练。
public int numDecodings(String s)
{
if(s==null || s.length()==0)
return 0;

int len=s.length();
int[] dp=new int[len+1];
dp[len]=1;
for(int i=len-1;i>=0;i--)
{
if(s.charAt(i)!='0')
{
dp[i]=dp[i+1];
if(i dp[i]+=dp[i+2];
}
}

return dp[0];
}
p*****2
发帖数: 21240
5

前推
随便看了一下,你怎么得出来的这个?

【在 h********o 的大作中提到】
: http://www.leetcode.com/onlinejudge 进入这个链接, 搜索 页面上“decode ways”就能找到题目。leetcode 大侠对题目的表达很清楚, 为了避免表达不清造成歧义,就不转述了
: 我觉得是个较为简单的DP,先列举出最后只剩一个字符,和两个字符的情况,然后往前推
: 代码如下:
: int numDecodings(string s) {
: int l = s.size();
: vector r(l,0);
: r[l-1] = 1;
: if ((s[l-2]-'0')*10+s[l-1]-'0' <= 26) r[l-2] = 2;
: else r[l-2] = 1;
: for (int i = l-3; i>=0; i--) {

h********o
发帖数: 14
6
非常惭愧,犯了几个低级的错误:
1. 竟然没考虑到到遇到 ‘0’ 不能单独解码
2. vector 下标溢出。
以后要多加注意,谢谢各位的回复和指点。
buaa (ming), 你的code我没有看明白:每次 看 first 和 second 两个字符,如果能
解码就 count++,否则就 count--, 我不确定这样能得出正确的结果。 建议还是用
DP 更容易理解。
peking2 (myfacebook) 的java代码是对的
我修改后的c++代码和 peking2 (myfacebook)的是一个思路, 贡你参考,如下:
int numDecodings(string s) {
int l = s.size();
if (l==0) return 0;
vector r(l+1,0);
if (s[l-1]=='0') r[l-1] = 0; // 先考虑最后一个字符的情况
else r[l-1] = 1;
r[l]=1;
for (int i = l-2; i>=0; i--) { //然后从倒数第二个字符往前推
if (s[i]=='0') r[i] = 0;
else{
r[i] = r[i+1];
if ((s[i]-'0')*10+s[i+1]-'0' <= 26)
r[i] = r[i] + r[i+2];
}
}
return r[0];
}

【在 p*****2 的大作中提到】
:
: 前推
: 随便看了一下,你怎么得出来的这个?

p*****2
发帖数: 21240
7

这题我也没一次作对,调了一会儿才行。

【在 h********o 的大作中提到】
: 非常惭愧,犯了几个低级的错误:
: 1. 竟然没考虑到到遇到 ‘0’ 不能单独解码
: 2. vector 下标溢出。
: 以后要多加注意,谢谢各位的回复和指点。
: buaa (ming), 你的code我没有看明白:每次 看 first 和 second 两个字符,如果能
: 解码就 count++,否则就 count--, 我不确定这样能得出正确的结果。 建议还是用
: DP 更容易理解。
: peking2 (myfacebook) 的java代码是对的
: 我修改后的c++代码和 peking2 (myfacebook)的是一个思路, 贡你参考,如下:
: int numDecodings(string s) {

b**a
发帖数: 1118
8
Thanks. It seemed mine is not right. I tried but failed to work from start.
Both you guys start from the end. I was wondering, is this required by DP
since you are using it? or something else? Mind sharing your thought train?
Really appreciate it.

【在 h********o 的大作中提到】
: 非常惭愧,犯了几个低级的错误:
: 1. 竟然没考虑到到遇到 ‘0’ 不能单独解码
: 2. vector 下标溢出。
: 以后要多加注意,谢谢各位的回复和指点。
: buaa (ming), 你的code我没有看明白:每次 看 first 和 second 两个字符,如果能
: 解码就 count++,否则就 count--, 我不确定这样能得出正确的结果。 建议还是用
: DP 更容易理解。
: peking2 (myfacebook) 的java代码是对的
: 我修改后的c++代码和 peking2 (myfacebook)的是一个思路, 贡你参考,如下:
: int numDecodings(string s) {

j*******e
发帖数: 1058
9
这一题貌似是新加的吧?之前没有的阿。
h********o
发帖数: 14
10
Sorry for late rely. I don't think that DP requires the start from the end.
The idea is to solve the smallest and simplest sub-problem first, and then,
with that result, you can derive the larger sub-problems which are more
complicated. In this problem, i guess starting from the end gives you the
smallest and simplest sub-problem that you can solve right away.

.

【在 b**a 的大作中提到】
: Thanks. It seemed mine is not right. I tried but failed to work from start.
: Both you guys start from the end. I was wondering, is this required by DP
: since you are using it? or something else? Mind sharing your thought train?
: Really appreciate it.

b**a
发帖数: 1118
11
I see. I learn quite some from this question. Really thx.

.
,

【在 h********o 的大作中提到】
: Sorry for late rely. I don't think that DP requires the start from the end.
: The idea is to solve the smallest and simplest sub-problem first, and then,
: with that result, you can derive the larger sub-problems which are more
: complicated. In this problem, i guess starting from the end gives you the
: smallest and simplest sub-problem that you can solve right away.
:
: .

1 (共1页)
进入JobHunting版参与讨论
相关主题
facebook 面经问一道Google的题
FB电面跪了,这算被黑了[转载]Hackercup: Squished Status & LeetCode: Decode Ways
关于技能规划,发包子求指点G家电题
leetcode上的大oj和小oj有什么本质差别吗?F电面
求助各位大牛:LeetCode的Decode WaysDP的状态转移方程
一刀题decode ways follow up string 里面有* 怎么修改代码?
I want to hear your explaination of this solution of decode ways.脸书的高频题decode ways的follow up怎么解
Docode 问题facebook面经
相关话题的讨论汇总
话题: int话题: dp话题: len话题: return话题: first