剑指Offer-46:把数字翻译成字符串
题目:
给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,……,11翻译成“1”,……,25翻译成“z”。一个数字可能有多个翻译。例如:12258有5种不同的翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
链接:
剑指Offer(第2版):P231
思路标签:
- 算法:递归、动态规划
解答:
用递归自顶向下分析,用动态规划自低向上求解
- 定义问题:当最开始的一个或者两个数字被翻译成一个字符后,我们接着翻译后面剩下的数字;
- 用一个递归式来表示:定义f(i)表示从第i位数字开始的不同翻译的数目,那么f(i) = f(i+1) + g(i,i+1)*f(i+2);当第i位和第i+1位两位数字拼接起来的数字在10~25的范围内时,函数g(i,i+1)的值为1,否则为0。
- 该问题使用上面的递归方法会存在很多重复子问题。所以我们使用动态规划的方法,自低向上求解问题,消除重复子问题。
class Solution {
public:int GetTranslationCount(int number) {if (number < 0)return 0;string numberInString = to_string(number);return GetTranslationCount(numberInString);}int GetTranslationCount(const string& number) {int length = number.length();int* counts = new int[length];int count = 0;for (int i = length - 1; i >= 0; i--) {count = 0;if (i < length - 1)count = counts[i + 1];elsecount = 1;if (i < length - 1) {int digit1 = number[i] - '0';int digit2 = number[i + 1] - '0';int converted = digit1 * 10 + digit2;if (converted >= 10 && converted <= 25) {if (i < length - 2)count += counts[i + 2];elsecount += 1;}}counts[i] = count;}count = counts[0];delete[] counts;return count;}};
C++相关
- C++11
std::to_string
- http://zh.cppreference.com/w/cpp/string/basic_string/to_string
剑指Offer-46:把数字翻译成字符串相关推荐
- 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
[LeetCode]剑指 Offer 46. 把数字翻译成字符串 文章目录 [LeetCode]剑指 Offer 46. 把数字翻译成字符串 package offer;public class So ...
- 【算法】剑指 Offer 46. 把数字翻译成字符串
1.概述 剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)
剑指 Offer 46. 把数字翻译成字符串 问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻 ...
- leetcode 剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 &q ...
- 【千字分析】剑指 Offer 46. 把数字翻译成字符串
我是小张同学,立志用更简洁的代码做更高效的表达 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 & ...
- 【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)
文章目录 题目描述 思路 && 代码 1. 动态规划做法 2. DFS 做法 二刷 打卡第六天~继续加油! 题目描述 万物皆可爬楼梯.-和爬楼梯原理很像,都是使用动态规划的做法来做~ ...
- 剑指 Offer 46. 把数字翻译成字符串
题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...
- Leetcode刷题笔记——剑指 Offer 46. 把数字翻译成字符串(中等)
文章目录 题目描述 解法:动态规划 方法一:字符串遍历 复杂度分析 C++代码实现 方法二:数字求余 复杂度分析 C++代码实现 参考链接 题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 ...
- 126. Leetcode 剑指 Offer 46. 把数字翻译成字符串 (动态规划- 字符串系列)
class Solution:def translateNum(self, num: int) -> int:nums = str(num)n = len(nums)#异常情况if n < ...
- 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】
青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...
最新文章
- 直方图均衡化opencv(彩色、灰度图)
- [译] 使用 Web3 和 Vue.js 来创建你的第一个以太坊 dAPP(第二部分)
- linux父子进程同步实验,Linux-父子进程的简单同步
- openfire(一):使用idea编译openfire4.2.3源码
- 使用Encog,ROME,JSoup和Google Guava进行博客分类
- Linux—微服务启停shell脚本编写模板
- 长文详解Attention、Seq2Seq与交互式匹配
- 从Logistic Regression 到 Neural Network
- CentOS7环境下MySQL升级
- QT添加MySQL驱动依赖
- MySQL卸载不干净问题
- 数据库SQL-测试常用查询
- android怎么做表格显示数据
- 小白学python(爬虫知识1(大体框架)
- java图形化界面编程之Swing
- 前端涨薪必读,node.js入门保姆级教程
- mysql utf8mb4 bin_Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci与utf8mb4_unicode_ci的选择...
- android创建layout,Android 创建不同的layout
- 2022年登高架设考试练习题及答案
- 记录下自己在淘宝摸索出的领红包位置
热门文章
- JetpackCompose Modifier常用属性介绍(1)
- excel sumifs多条件求和
- vue2.5版本源代码编译报 Could not load ..\vue\src\core/config 错误的问题 npm run dev 编译报错...
- html好看特效代码,教你制作漂亮的HTML代码特效贴
- 用python绘制用例图源代码_用Visio画UML用例图
- 数据分析报告怎么写(二)
- Scholar ID
- 利用WireShark分析H264码流
- matplotlib绘制随机漫步
- 电脑W ndoWs未能启动怎么办,电脑出现windows未能启动怎么办