分割整数构成字母字符串(动态规划)
分割整数构成字母字符串(动态规划)
题目:
一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
算法思想:
创建一个数组,dp[] 长度为 n + 1 ;
- 如果字符串为空,或者字符串首字母为 ‘0’ 那么返回 0 ;无法编码;
- 初始化dp=[0,…,0],长度为n+1,dp[0]=1,dp[1]=1,dp[1]=1表示第一位的解码方法,dp[0]的作用,在于两位时,如:“12”,dp[2]=dp[1]+dp[0]。
- 遍历s,遍历区间[1,n):
- 如果s[i] == ‘0’ , 且 s[i - 1] == 1 || s[i - 1] == 2, 则dp[i + 1] = dp[i - 1]
- 否则:
- s[i - 1] 为 1 ,或者 s[i - 2] 为 2 且 s[i] <= 6 && s[i] >= 1, 则 dp[i + 1] = dp[i] + dp[i - 1] ;
- 否则: dp[i + 1] = dp[i] ;
public int numDecodings(String s) {int len = s.length();if (s == null || len == 0 || s.charAt(0) == '0') {return 0;}int[] dp = new int[len + 1];dp[0] = 1;dp[1] = 1;for (int i = 1; i < len; i++) {int num1 = Integer.valueOf(s.substring(i, i + 1));int num2 = Integer.valueOf(s.substring(i - 1, i));if (num1 == 0) {if (num2 == 1 || num2 == 2) {dp[i + 1] = dp[i - 1];} else {return 0;}} else {dp[i + 1] = dp[i] + dp[i - 1];if (num2 == 1 || (num2 == 2 && (num1 <= 6 && num1 >= 1))) {dp[i + 1] = dp[i] + dp[i - 1];} else {dp[i + 1] = dp[i];}}}return dp[len];}
总结:每道算法题都应该想清楚思路,再开始写代码,不然逻辑混乱,就是在瞎想。
分割整数构成字母字符串(动态规划)相关推荐
- Python基础笔记(二)整数缓存、字符串驻留机制、字符串格式化等
1.同一运算符"is"用于判断两个标识符是不是引用同一个对象 a = 1000 b = 1000c = -6 d = -6print(a is b) print(id(a), ...
- C语言编程>第十六周 ⑧ S是一个由数字和字母字符串组成的字符串,由变量len传入字符串长度。请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中
例题:S是一个由数字和字母字符串组成的字符串,由变量len传入字符串长度.请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中,函数返回数组a的长度. 例如,s=&qu ...
- python pandas 分割DataFrame中的字符串及元组
python pandas 分割DataFrame中的字符串类型数据的方法 文章目录 1.使用str.split()方法 2.使用join()与split()方法结合 3. 使用apply方法分割元组 ...
- 字符串分隔 -连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。...
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输 ...
- php生成唯一的加密串,hashids.php-master整数生成唯一字符串的加密库
hashids.php-master整数生成唯一字符串的加密库 namespace Hashids; class Hashids implements HashidsInterface { const ...
- 整数转化成字符串; 字符串转换为整数
整数转化成字符串: 字符串转换为整数 /*整数转化成字符串*/ char *IntToStr(int num, char str[]) {int i = 0, j = 0;char temp[100] ...
- php俩个字符串合并,php分割合并两个字符串的函数实例
本文实例讲述了php分割合并两个字符串的函数..具体实现方法如下: 这里实现把两个字符串进行分割合并,例如str1=aaaa,str2=bbbb,合并后生成abababab /** * Merges ...
- c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为八进制字符串(char [])...
c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into octal string (char[]) in ...
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
自定义取出第几个分割字符前的字符串,默认位置(0) 格式:dbo.split(字段名,'分隔字符',取出的第几个字符串) 如果没有分隔的字符,则返回整个字符串. 如果取出的位置字符串的位置超出Inde ...
- php中文本设置随机颜色,php 产生随机整数,随机字符串,随机颜色等类用法
/** * 产生随机整数,随机字符串,随机颜色等 * * @param * @arrange (512.笔记) jb51.cc **/ public static class RandomHelper ...
最新文章
- Observables简介以及它们与Promise有何不同
- 苏州人民很快能坐上无人驾驶巴士,技术来自这家前Waymo工程师创立的公司
- 路径调度问题(CVRP)后续之如何在MATLAB中安装YALMIP及CPLEX包
- Docker安装Logstash7.7.0
- 父类和子类在同一张表
- JS 关于(function( window, undefined ) {})(window)写法的理解
- iOS xcode多版本切换
- 【渝粤题库】陕西师范大学800007 地理信息系统
- Vue介绍-Vue简单应用-Vue基本用法
- 图解 SpringMVC 五大组件
- 联想计算机内安装硬盘,联想装固态硬盘教程_联想电脑如何安装固态硬盘-win7之家...
- MATLAB编程算矩阵,MatLab矩阵计算
- matlab求极限分布,中心极限定理的Matlab演示
- 企业微信SCRM会员营销 您的私域流量池精细化运营平台
- C语言每日一练——第12天:求一个矩阵的转置
- 点线面的意义_点线面在绘画中的意义
- 可以打开c语言的软件图标是个虫子,VC雕虫小技集(四) (转)
- 58.union (联合查询)
- VR全景拍摄怎么设置相机
- 学习C++该看什么书?
热门文章
- 【APP 测试】绕过华为手机打开 USB 调试需要先登录华为账号问题
- gnome桌面kali linux状态栏显示网速
- 电商运营数据分析常用分析指标--交易数据指标、品类分析数据指标与内容分析数据指标
- Unity UGUI坐标和世界坐标转化
- maven-resources-plugin:2.6:resources (default-resources)
- 一款PHP版三合一收款码_附50多款模板源码
- pdf.js预览pdf文件流(base64)
- KY-RTI分布仿真技术:第一章 简介
- 毫米波雷达产业链全景
- Android开发实用小工具八——汇率转换工具