题解 | #摩尔斯电码解码#
摩尔斯电码解码
http://www.nowcoder.com/practice/592a069811044d3fadb94c6c55d7b4f2
- 分为 1 位, 2位, 3位 。然后从底向高位逐渐添加。
- dp[0] = 1是由动态规划方程给出来的。
- 三种情况,先走1,再走2,最后走3.
dp[i] = dp[i-1]; dp[i] += dp[i-2];dp[i] += dp[i-3]; - 记得对long long 最大值取余。2147483647
#include<bits/stdc++.h> using namespace std; const long long mod = 2147483647; int main(){ string s; while(cin>>s){ vector<int> dp(s.size()+1,0); dp[0] = 1; dp[1] =1; for(int i=2; i<= s.size();i++){ dp[i] = dp[i-1]; if(s.substr(i-2,2)=="10"||s.substr(i-2,2)=="11"){ dp[i] += dp[i-2]; } if(i>=3 && (s.substr(i-3,3)=="100"||s.substr(i-3,3)=="101"|| s.substr(i-3,3)=="110"||s.substr(i-3,3)=="111")){ dp[i] += dp[i-3]; } dp[i]%= mod; } cout<<dp[s.size()]<<endl; } return 0; }
大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结