算法作业系列11——Decode Ways
来源:互联网 发布:iphone无缝拼图软件 编辑:程序博客网 时间:2024/06/05 18:26
算法作业系列11
Decode Ways
写在前面
如果你是来找答案的,下面先提供你一下思路,拿回去自己再想想看是不是真的不会。
1. 从第二个开始,考虑当前位置有多少种组合时候,想想看,如果能和前一个位置组成合法的组合的话,那就是上一个位置的组合方式加上上上个位置的组合方式;如果不能,只能乖乖等于上个位置的组合方式
2. 根据第一条写出来基础代码后 ,提交看看,自己是不是忘了特殊的0?
题目
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1'B' -> 2...'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message “12”, it could be decoded as “AB” (1 2) or “L” (12).
The number of ways decoding “12” is 2.
思路
这题其实并不是那么难,所以我这里只是简单说一下思路,基础的思路上面已经给出了,这里只是补充说明以及写下一些特殊情况。
1. 对于某个位置来说,我们看从0-i(当前位置的下标)有多少种时,先看从0-(i-1)有多少种,这是一种组合情况;接下来再看从0-(i-2)有多少种,如果当前位置和上一个位置组成的数字是合法的,那么我们就多了一种组合方式,那就是这两个组合在一起,前面到i-2的数目加上前面i-1的数目就是要的数目。
2. 现在考虑0,题目并不把0看作合法的,也就说01并不代表1,所以对于每一个0,我们要想,首先,它自身一定是不能单独代表某个数字的;其次,如果它和前面的组合得到的结果同样不合法,那这个字符串就无法拆分成合法的,因此,0的判别非常重要
代码
#include<iostream>#include<string>using namespace std;class Solution {public: int numDecodings(string s) { if (s.length() == 0 || s[0] == '0') { return 0; } int a = 1; int b = 1; for (int i = 1; i < s.length(); i++) { if (s[i] == '0' && (s[i - 1] == '0' || s[i - 1] > '2')) { return 0; } if (s[i] == '0') { int c = a; a = b; b = c; continue; } string tmp = s.substr(i - 1, 2); int num = stoi(tmp, nullptr); if (num >= 10 && num <= 26) { int c = b; b = a + b; a = c; } else { a = b; } } return b; }};
- 算法作业系列11——Decode Ways
- 算法系列——Decode Ways
- 算法设计课作业系列3——Different Ways to Add Parentheses
- LeetCode —— Decode Ways
- LeetCode——Decode Ways
- leetcode——Decode Ways
- LeetCode91——Decode Ways
- leetcode笔记—Decode Ways
- leetcode 091 —— Decode Ways
- Leetcode——91. Decode Ways
- Leetcode——639.Decode Ways II
- 13.10—动态规划—Decode Ways
- 动态规划——Decode Ways[LeetCode]
- (每日算法)LeetCode --- Decode Ways
- 算法课第10周第3题——91. Decode Ways
- [leetcode刷题系列]Decode Ways
- leetcode由易入难——【4】Decode Ways
- 【leetcode】String——Decode Ways(91)
- java中的匿名内部类总结
- Java--编程语言的常青树
- 资源
- 在CentOS7.4中使用Vsftpd搭建FTP服务器
- FL Studio中的Layer控制器之如何叠加音色
- 算法作业系列11——Decode Ways
- c# 两数相除的三种取整方式 1.向上取整 2.向下取整 3.四舍五入
- 建造者模式-Builder Pattern
- Android:ApplicationContext 与 非Context 在区别图
- Altium Designer -- 精心总结
- 进程管理API之task_tgid_nr_ns
- table 中 点击某行,获取这一行的数据弹框显示,或进行其他的操作
- J2EE开发模型分析
- css sprites的学习