leetcode面试准备:Decode Ways
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,1 题目A message containing letters from A-Z is being encoded to numbers using the following mapping:'A
千家信息网最后更新 2024年09月21日leetcode面试准备:Decode Ways
1 题目
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.
接口:public int numDecodings(String s);
2 思路
一维动态规划,偷懒了,照搬博文。
分析:需要注意的是,如果序列中有不能匹配的0,那么解码方法是0,比如序列012 、100(第二个0可以和1组成10,第三个0不能匹配)。
递归的解法很容易,但是大集合会超时。转换成动态规划的方法,假设dp[i]表示序列s[0...i-1]的解码数目
动态规划方程如下:
初始条件:dp[0] = 1, dp[1] = (s[0] == '0') ? 0 : 1
dp[i] = ( s[i-1] == 0 ? 0 : dp[i-1] ) + ( s[i-2,i-1]可以表示字母 ? dp[i-2] : 0 ), 其中第一个分量是把s[0...i-1]末尾一个数字当做一个字母来考虑,第二个分量是把s[0...i-1]末尾两个数字当做一个字母来考虑
复杂度: Time O(n); Space O(n)
3 代码
public int numDecodings(String s) { // 1.初始化 final int len = s.length(); if (len == 0) return 0; int[] dp = new int[len + 1]; dp[0] = 1; if (s.charAt(0) != '0') dp[1] = 1; else dp[1] = 0; // 2.一维DP方程 for (int i = 2; i <= len; i++) { if (s.charAt(i - 1) != '0') dp[i] = dp[i - 1]; else dp[i] = 0; if (s.charAt(i - 2) == '1' || (s.charAt(i - 2) == '2' && s.charAt(i - 1) <= '6')) dp[i] += dp[i - 2]; } return dp[len]; }
4 总结
写递归的解法
新航道雅思
动态
字母
序列
规划
分量
数字
方法
方程
末尾
解法
一维
递归
复杂
三个
两个
代码
初始条件
复杂度
大集
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
赣州市网络安全指挥中心夜班
宁波易桥软件开发电话
奉贤区个性化软件开发技术指导
网络安全监测装置通过率
数据库与可视化管理
重庆挖财网络技术有限公司招聘
网信河北网络安全的特点
在软件开发中为什么用uml
管理的服务器软件有哪些功能
数据库数据有哪些特性
海康流媒体服务器告警灯亮
软件开发入股分红协议
垣曲软件开发
淮北租赁软件开发平台
网络安全中参透的含义
家长课堂 网络安全
用数据库做一个系统
大肠癌病理数据库
太仓租房软件开发
青海云博软件开发有限公司
数据库表没设置主键可以吗
哈利波特新服务器规律
魔兽世界 60 数据库
订单兔软件开发
奉贤区综合软件开发信息推荐
阿里巴巴维护网络安全
电脑服务器的机器名在哪里
优米互联网科技有什么手游
网易服务器黑鼠速飞
2021高考博雅数据库