leetcode面试准备:Decode Ways
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,1 题目A message containing letters from A-Z is being encoded to numbers using the following mapping:'A
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
招聘软件开发app工程师
网络安全都有哪些重要的
汽车的软件开发岗是干什么的
王者荣耀竞猜软件开发
软件开发行业营业成本
太湖科技城互联网
舟山软件开发哪家强
数据库统计字段一样数量
服务器安全狗sdui
北京卫视首都网络安全日回放
网络安全知识ppt课件团课
惠康服务器cpu转速过快
手机软件开发公司名单
免费教学网络技术的app
java数据库创建数据库
数据库应用技术实验项目
襄垣县荒地国家数据库
阿里拍卖后台数据库怎么找
注册网络安全工程师怎么报名
洛奇英雄传 数据库
数据库cpu打满
软件开发成功的原因
广东程序软件开发哪家便宜
新华社多媒体数据库pdf下载
怀旧服怎么发数据库装备
研究生银行做网络安全工资
阴阳师进不去服务器
polardb数据库启动
ecd打开数据库
软件开发项目竞标方案