分割整数构成字母字符串(动态规划)

题目:
一条包含字母 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 ;

  1. 如果字符串为空,或者字符串首字母为 ‘0’ 那么返回 0 ;无法编码;
  2. 初始化dp=[0,…,0],长度为n+1,dp[0]=1,dp[1]=1,dp[1]=1表示第一位的解码方法,dp[0]的作用,在于两位时,如:“12”,dp[2]=dp[1]+dp[0]。
  3. 遍历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];}

总结:每道算法题都应该想清楚思路,再开始写代码,不然逻辑混乱,就是在瞎想。

分割整数构成字母字符串(动态规划)相关推荐

  1. Python基础笔记(二)整数缓存、字符串驻留机制、字符串格式化等

    1.同一运算符"is"用于判断两个标识符是不是引用同一个对象   a = 1000 b = 1000c = -6 d = -6print(a is b) print(id(a), ...

  2. C语言编程>第十六周 ⑧ S是一个由数字和字母字符串组成的字符串,由变量len传入字符串长度。请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中

    例题:S是一个由数字和字母字符串组成的字符串,由变量len传入字符串长度.请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中,函数返回数组a的长度. 例如,s=&qu ...

  3. python pandas 分割DataFrame中的字符串及元组

    python pandas 分割DataFrame中的字符串类型数据的方法 文章目录 1.使用str.split()方法 2.使用join()与split()方法结合 3. 使用apply方法分割元组 ...

  4. 字符串分隔 -连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。...

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输 ...

  5. php生成唯一的加密串,hashids.php-master整数生成唯一字符串的加密库

    hashids.php-master整数生成唯一字符串的加密库 namespace Hashids; class Hashids implements HashidsInterface { const ...

  6. 整数转化成字符串; 字符串转换为整数

    整数转化成字符串: 字符串转换为整数 /*整数转化成字符串*/ char *IntToStr(int num, char str[]) {int i = 0, j = 0;char temp[100] ...

  7. php俩个字符串合并,php分割合并两个字符串的函数实例

    本文实例讲述了php分割合并两个字符串的函数..具体实现方法如下: 这里实现把两个字符串进行分割合并,例如str1=aaaa,str2=bbbb,合并后生成abababab /** * Merges ...

  8. c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为八进制字符串(char [])...

    c语言中将整数转换成字符串 Given an ASCII string (char[]) and we have to convert it into octal string (char[]) in ...

  9. SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串

    自定义取出第几个分割字符前的字符串,默认位置(0) 格式:dbo.split(字段名,'分隔字符',取出的第几个字符串) 如果没有分隔的字符,则返回整个字符串. 如果取出的位置字符串的位置超出Inde ...

  10. php中文本设置随机颜色,php 产生随机整数,随机字符串,随机颜色等类用法

    /** * 产生随机整数,随机字符串,随机颜色等 * * @param * @arrange (512.笔记) jb51.cc **/ public static class RandomHelper ...

最新文章

  1. Observables简介以及它们与Promise有何不同
  2. 苏州人民很快能坐上无人驾驶巴士,技术来自这家前Waymo工程师创立的公司
  3. 路径调度问题(CVRP)后续之如何在MATLAB中安装YALMIP及CPLEX包
  4. Docker安装Logstash7.7.0
  5. 父类和子类在同一张表
  6. JS 关于(function( window, undefined ) {})(window)写法的理解
  7. iOS xcode多版本切换
  8. 【渝粤题库】陕西师范大学800007 地理信息系统
  9. Vue介绍-Vue简单应用-Vue基本用法
  10. 图解 SpringMVC 五大组件
  11. 联想计算机内安装硬盘,联想装固态硬盘教程_联想电脑如何安装固态硬盘-win7之家...
  12. MATLAB编程算矩阵,MatLab矩阵计算
  13. matlab求极限分布,中心极限定理的Matlab演示
  14. 企业微信SCRM会员营销 您的私域流量池精细化运营平台
  15. C语言每日一练——第12天:求一个矩阵的转置
  16. 点线面的意义_点线面在绘画中的意义
  17. 可以打开c语言的软件图标是个虫子,VC雕虫小技集(四) (转)
  18. 58.union (联合查询)
  19. VR全景拍摄怎么设置相机
  20. 学习C++该看什么书?

热门文章

  1. 【APP 测试】绕过华为手机打开 USB 调试需要先登录华为账号问题
  2. gnome桌面kali linux状态栏显示网速
  3. 电商运营数据分析常用分析指标--交易数据指标、品类分析数据指标与内容分析数据指标
  4. Unity UGUI坐标和世界坐标转化
  5. maven-resources-plugin:2.6:resources (default-resources)
  6. 一款PHP版三合一收款码_附50多款模板源码
  7. pdf.js预览pdf文件流(base64)
  8. KY-RTI分布仿真技术:第一章 简介
  9. 毫米波雷达产业链全景
  10. Android开发实用小工具八——汇率转换工具