当前位置: 首页 > wzjs >正文

网站备案的链接bt最佳磁力搜索引擎吧

网站备案的链接,bt最佳磁力搜索引擎吧,wordpress中文留言板,论述市场营销对网站设计的影响文章目录 数字解码为字母的方案计数问题理解解题思路Java实现代码解析测试用例总结 数字解码为字母的方案计数 问题理解 给定一个数字字符串,我们需要计算它可以被解码为字母字符串的所有可能方式。解码规则为: 数字1对应字母’a’数字2对应字母’b’…

文章目录

  • 数字解码为字母的方案计数
    • 问题理解
    • 解题思路
    • Java实现
    • 代码解析
    • 测试用例
    • 总结

数字解码为字母的方案计数

问题理解

给定一个数字字符串,我们需要计算它可以被解码为字母字符串的所有可能方式。解码规则为:

  • 数字1对应字母’a’
  • 数字2对应字母’b’
  • 数字26对应字母’z’

例如,"12258"有5种解码方式:

  1. 1 2 2 5 8 → “abbeh”
  2. 1 2 25 8 → “abyh”
  3. 1 22 5 8 → “aveh”
  4. 12 2 5 8 → “lbeh”
  5. 12 25 8 → “lyh”

解题思路

这个问题可以使用动态规划来解决,关键在于如何处理数字的组合方式:

  1. 基本情况

    • 空字符串有1种解码方式(即空字符串)
    • 单个数字字符(非’0’)有1种解码方式
  2. 递推关系

    • 当前数字可以单独解码(1-9)
    • 当前数字和前一个数字可以组合解码(10-26)
  3. 边界条件

    • 数字’0’不能单独解码
    • 以’0’开头的字符串无法解码

Java实现

public class DecodeWays {public static int numDecodings(String s) {if (s == null || s.length() == 0) {return 0;}int n = s.length();int[] dp = new int[n + 1];dp[0] = 1; // 空字符串有1种解码方式dp[1] = s.charAt(0) == '0' ? 0 : 1; // 第一个字符的解码方式for (int i = 2; i <= n; i++) {// 检查单个数字int oneDigit = Integer.parseInt(s.substring(i - 1, i));if (oneDigit >= 1 && oneDigit <= 9) {dp[i] += dp[i - 1];}// 检查两个数字组合int twoDigits = Integer.parseInt(s.substring(i - 2, i));if (twoDigits >= 10 && twoDigits <= 26) {dp[i] += dp[i - 2];}}return dp[n];}// 优化空间版本public static int numDecodingsOptimized(String s) {if (s == null || s.length() == 0 || s.charAt(0) == '0') {return 0;}int prev1 = 1; // dp[i-1]int prev2 = 1; // dp[i-2]for (int i = 1; i < s.length(); i++) {int current = 0;// 检查单个数字if (s.charAt(i) != '0') {current += prev1;}// 检查两个数字组合int twoDigits = Integer.parseInt(s.substring(i - 1, i + 1));if (twoDigits >= 10 && twoDigits <= 26) {current += prev2;}prev2 = prev1;prev1 = current;}return prev1;}public static void main(String[] args) {System.out.println(numDecodings("12258")); // 输出5System.out.println(numDecodings("226"));   // 输出3System.out.println(numDecodings("06"));    // 输出0System.out.println(numDecodingsOptimized("12258")); // 输出5System.out.println(numDecodingsOptimized("226"));   // 输出3System.out.println(numDecodingsOptimized("06"));    // 输出0}
}

代码解析

  1. 基础动态规划版本

    • 使用dp数组存储中间结果,dp[i]表示前i个字符的解码方式数
    • 检查单个数字(1-9)和两个数字组合(10-26)的可能性
    • 时间复杂度O(n),空间复杂度O(n)
  2. 优化空间版本

    • 仅使用两个变量prev1prev2代替整个dp数组
    • 每次迭代更新当前值并滚动更新前两个状态
    • 时间复杂度O(n),空间复杂度O(1)

测试用例

public static void main(String[] args) {// 常规测试System.out.println(numDecodings("12"));     // 输出2 ("AB"或"L")System.out.println(numDecodings("226"));   // 输出3// 边界测试System.out.println(numDecodings("0"));     // 输出0System.out.println(numDecodings("10"));    // 输出1System.out.println(numDecodings("100"));   // 输出0// 大数测试System.out.println(numDecodings("1111111111111111111111111111"));  // 输出317811
}

总结

这个问题展示了动态规划在字符串解码问题中的典型应用。关键点在于:

  1. 识别数字可以单独或组合解码的两种情况
  2. 正确处理’0’的特殊情况
  3. 通过状态转移方程累计所有可能的解码方式

优化版本在保持相同时间复杂度的同时,将空间复杂度从O(n)降低到O(1),是更优的解决方案。

http://www.dtcms.com/wzjs/183496.html

相关文章:

  • 珠海做网站专业公司种子搜索神器在线搜
  • 网站的真实域名seo指的是
  • 深圳大学网站建设竞价推广平台有哪些
  • 青海玉树网站建设seo站长工具推广平台
  • 微信昵称大全沧州网站推广优化
  • wordpress storageseo网站优化方案书
  • 网站开发需要多少钱推荐网站优化资源
  • 广州公司网站开发发布软文平台
  • 网站官网建设注意seo如何优化图片
  • 芜湖建站公司百度网站推广怎么做
  • 注册公司代理网seo网站推广培训
  • 网站后端做留言板功能seo排名优化软件有
  • 不用fash做的视频网站公司管理培训课程大全
  • 淘宝客网站可以做分销吗杭州seo搜索引擎优化
  • wordpress动漫博客主题免费下载搜索引擎优化怎么做
  • 网站建设要做些什么问题seo主要优化
  • 江西网站搜索引擎优化网络广告设计
  • 怎样一个域名做两个网站八上数学优化设计答案
  • 中国建设网官方网站洞庭湖治理博客是哪个软件
  • 帮别人做网站推广犯法吗网站流量统计分析
  • 建设历史文化旅游宣传网站保定seo网站推广
  • 怎么用电脑做网站虚拟空间充电宝关键词优化
  • 一级a做爰片免费视频网站网络营销推广策划书
  • 小说网站建设的支柱选择宁波seo优化公司
  • 陕西一建2022停考宁波seo关键词优化报价
  • 构建一个网站网络营销企业有哪些
  • 个人网站如果做新网站如何推广
  • .net做的网站代码百度视频下载
  • 网站开发能申请软件著作权吗网络营销活动策划
  • 货到付款网站建设交换友情链接的意义是什么