[剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]

【问题描述】[中等]

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"提示:0 <= num < 231

【解答思路】

1. 动态规划

在这里插入图片描述
在这里插入图片描述

1.1 字符串遍历

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(N)

class Solution {public int translateNum(int num) {String s = String.valueOf(num);int[] dp = new int[s.length()+1];dp[0] = 1;dp[1] = 1;for(int i = 2; i <= s.length(); i ++){String temp = s.substring(i-2, i);if(temp.compareTo("10") >= 0 && temp.compareTo("25") <= 0)dp[i] = dp[i-1] + dp[i-2];elsedp[i] = dp[i-1];}return dp[s.length()];}
}
class Solution {public int translateNum(int num) {char[] sc = String.valueOf(num).toCharArray();int n = sc.length;int[] f = new int[n + 1];f[0] = 1;for (int i = 1; i <= n; i++) {//if (sc[i - 1] >= '0' && sc[i - 1] <= '9') {f[i] += f[i - 1];//}if (i > 1) {int a = (sc[i - 2] - '0') * 10 + (sc[i - 1] - '0');if (a >= 10 && a <= 25) {f[i] += f[i - 2];}}}return f[n];}
}
1.2 数字求余(压缩空间)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int translateNum(int num) {int a = 1, b = 1, x, y = num % 10;while(num != 0) {num /= 10;x = num % 10;int tmp = 10 * x + y;int c = (tmp >= 10 && tmp <= 25) ? a + b : a;b = a;a = c;y = x;}return a;}
}
2. 逆推递归

递归出口是num是只有一位数,以xyzcba为例,先取最后两位(个位和十位)即ba,如果ba>=26,必然不能分解成f(xyzcb)+f(xyzc),此时只能分解成f(xyzcb);但还有一种情况,就是ba<=9,也就是该数十位上为0,此时也不能分解。代码如下:

时间复杂度:O(N^2) 空间复杂度:O(1)

class Solution {public int translateNum(int num) {if (num<=9) {return 1;}//xyzcbaint ba = num%100;if (ba<=9||ba>=26) {return translateNum(num/10);}else  {return translateNum(num/10)+translateNum(num/100);}}
}#### 【总结】
###### 1.从前往后 从后往前 由结果逆推
###### 2.细节
2.1 整形转字符串
String s = String.valueOf(num);
2.2整形转字符数组
char[] sc = String.valueOf(num).toCharArray();
###### 3. 动态规划流程
第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩转载链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/mian-shi-ti-46-ba-shu-zi-fan-yi-cheng-zi-fu-chua-6/参考链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/di-gui-qiu-jie-shuang-bai-by-xiang-shang-de-gua-ni/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVM分区无损增减

http://www.361way.com/change-lvm-size/1792.html转载于:https://www.cnblogs.com/augusite/p/10431263.html

前端基础1——HTML5

目录初识HTML网页基本标签列表表格视频和音频页面结构内联框架表单语法初识HTML Hyper Text Markup Language&#xff08;超文本标记语言&#xff09; <!--DOCTYPE&#xff1a;告诉浏览器使用什么规范&#xff08;默认是html&#xff09;--> <!DOCTYPE html> <…

数字图像处理系统组成 及研究内容

数字图像处理系统组成 及研究内容 .数字图像处理系统的组成 基本图象处理系统的结构 图像输入设备 扫描仪分辨率与扫描图象的大小 分辨率&#xff1a;单位长度上采样的像素个数DPI(dot/inch) 图像输出设备 喷墨打印机 激光打印机 数字印刷机 .图像处理技术研究的内容 图…

[剑指offer][JAVA]面试题第[18]题[删除链表的节点]

【问题描述】[中等] 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。返回删除后的链表的头节点。注意&#xff1a;此题对比原题有改动示例 1:输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点&#xff0…

Python3 循环

L [Bart, Lisa, Adam] for i in L:print("这是for循环的" "输出 hello:" i.upper())i 0 while i < len(L):print("这是while 循环的输出 hello:" L[i])i i 1转载于:https://www.cnblogs.com/RHadoop-Hive/p/10432219.html

HDU 6168 Numbers 思维

本题就是告诉你有两个数串 其中第一个数串中的每两个元素ai和aj&#xff08;i<j&#xff09;相加得到的元素 放入第二个数串里 但由于两个数串给搞的比较混乱 需要解决从中识别出第一个数串并将其输出出来 本题其实仔细一想就能发现 这个问题 我们从数串的特点上考虑 第二…

前端基础2——CSS3

目录什么是CSSCSS的导入方式选择器美化网页元素盒子模型浮动定位什么是CSS Cascading Style Sheet 层叠级联样式表 CSS&#xff1a;表现层&#xff08;美化网页&#xff09; 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高宽&#xff0c;背景图片&#xff0c;网页定位&…

Socket常见错误代码与描述

如错误代码10061&#xff0c; 说明服务器已经找到&#xff0c;但连接被服务器拒绝&#xff0c; 连接失败原因可能是&#xff1a; 端口号设置错误&#xff1b; 2.服务器没有处于监听状态 &#xff08;即ServerSocket –>Activetrue&#xff09;&#xff1b; 3.数据包被服务…

关于set的自定义比较函数的使用及结构体的上下二分用法

如果set的类型是个结构体 我们需要定义重载函数 ***set 容器模版需要3个泛型参数&#xff0c;如下&#xff1a; template <class Key,class Compare less <key>,class Alloc alloc>class set {...}; 第一个是元素类型&#xff0c;必选&#xff1b; 第二个指定…

BZOJ 3456: 城市规划(dp+多项式求逆)

传送门 解题思路 这道题就是求带标号的无向连通图个数&#xff0c;首先考虑\(O(n^2)\)的做法&#xff0c;设\(f_i\)表示有\(i\)个节点的无向连通图个数&#xff0c;那么考虑容斥&#xff0c;先把所有的无向图求出&#xff0c;即为\(2^{C(n,2)}\)&#xff0c;再减去不联通的情况…

前端基础3-1——JavaScript

目录什么是JavaScript快速入门引入JavaScript数据类型和基本语法入门1.变量2.number3.字符串4.布尔值5.逻辑运算6.比较运算符7.浮点数8.数组9.对象10.流程控制11.Map和Set集合严格检查模式use strict函数定义函数变量的作用域方法什么是JavaScript 概述 JavaScript是一门世界上…

[剑指offer][JAVA]面试题第[17]题[打印从1到最大的n位整数][大整数][递归回溯]

【问题描述】[中等] 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n 1 输出: [1,2,3,4,5,6,7,8,9]说明&#xff1a;用返回一个整数列表来代替打印 n 为正整数【解答思路】…

html:(40):块级元素和内联块级元素

1.下表列出了内联元素和块级元素的主要区别 html中内联元素和块级元素的区别 块级元素 行内元素 独占一行,默认情况下&#xff0c;其宽度自动填满其父元素宽度 相邻的行内元素会排列在同一行里&#xff0c;直到一行排不下&#xff0c;才会换行&#xff0c;其宽度随元素的内…

Django中提供了6种缓存方式

开发调试内存文件数据库Memcache缓存&#xff08;python-memcached模块&#xff09;Memcache缓存&#xff08;pylibmc模块&#xff09;1. 开发调试 12345678910111213141516171819202122232425262728293031323334353637383940# 此为开始调试用&#xff0c;实际内部不做任何操作…

HDU-6180 Schedule

题意 给n个工作的开始时间和结束时间 每个工作需要用机器来完成 让我们给这n个工作规划机器 规划出尽可能少机器数目 以及计算最少的机器时间(机器时间为机器使用的最终结束时间减去开始时间)分析 这道题其实就是一个工作的开始结束形成了一个线段 让我们求多个线段不交叉不重…

数字图像处理技术的应 用领域

数字图像处理技术的应 用领域 图像处理技术的主要应用领域有&#xff1a; 生物医学、遥感技术、工业生产、军事技术、 通信技术、侦缉破案、气象预报、宇宙探索、考 古等&#xff0c;已经遍布国民经济的各个领域。 发展历史 20世纪20年代&#xff1a;报纸业 Bartlane电缆图…

前端基础3-2——JavaScript

目录内部对象DateJSONAJAX面向对象编程操作BOM对象&#xff08;重点&#xff09;操作DOM对象&#xff08;重点&#xff09;操作表单formjQuery如何巩固前端基础内部对象 标准对象 Date 基本使用 转换 JSON JSON是什么 在javascript中&#xff0c;一切皆为对象&#…

ltp makefile 解析

困惑于 /include/mk/automake.mk中出现了第一个目标 而makefile却任然将all当做最终目标 测试了一番后发觉&#xff1a; ifeq ($(MAKE_3_80_COMPAT),1)# Trick make 3.80 into thinking that the default goal is all..PHONY: defaultdefault: allelse #pick this.DEFAULT_GOA…

数字图像处理(拓展)

1&#xff0e;数字图像处理及特点 数字图像处理又称为计算机图像处理&#xff0c;它是指将图像信号转换成数字信号并利用计算机 对其进行处理的过程&#xff0c;以提高图像的实用性&#xff0c;从而达到人们所要求的预期结果。 数字图像处 理还有以下特点&#xff1a; ① 处理…

HDU-5532Almost Sorted Array LIS问题

题意 就是检查这个序列是否删除一个元素就能变成非严格的有序序列 表面上就是一个卡条件检查数组的问题 分析&#xff1a; 在向量中upperbound插入上界 这样能够使数组里的数列长度尽可能大 因为 我们是在不断用小数替换数列中的数 大的数直接拼接到最后 code #include…