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

建设人行官方网站快速建站模板自助建站

建设人行官方网站,快速建站模板自助建站,小程序需要写网站建设方案书,海口网约车平台有哪些把数字翻译成字符串 题目描述示例示例1示例2 题解动态规划代码实现复杂度分析 总结 题目描述 有一种将字母编码成数字的方式:‘a’->1, ‘b’->2, … , ‘z’->26。 现在给一串数字,返回有多少种可能的译码结果。 数据范围:字符串…

把数字翻译成字符串

    • 题目描述
    • 示例
      • 示例1
      • 示例2
    • 题解
      • 动态规划
      • 代码实现
      • 复杂度分析
    • 总结

题目描述

有一种将字母编码成数字的方式:‘a’->1, ‘b’->2, … , ‘z’->26。

现在给一串数字,返回有多少种可能的译码结果。

数据范围:字符串长度满足 (0 < n \leq 90)

进阶:空间复杂度 (O(n)),时间复杂度 (O(n))

示例

示例1

输入

"12"

返回值

2

说明
2种可能的译码结果(“ab” 或 “l”)

示例2

输入

"31717126241541717"

返回值

192

说明
192种可能的译码结果

题解

动态规划

我们可以使用动态规划来解决这个问题。设 dp[i] 表示前 i 个数字可以翻译成多少种不同的字符串。状态转移方程如下:

  1. 如果当前数字 nums[i] 不为 0,则 dp[i] += dp[i-1]
  2. 如果当前数字 nums[i-1]nums[i] 组成的两位数在 1026 之间,则 dp[i] += dp[i-2]

边界条件

  • dp[0] = 1,表示空字符串有一种翻译方式。
  • dp[1] = 1,如果第一个字符不为 0,则有一种翻译方式。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 解码函数
int solve(char* nums) {int length = strlen(nums); // 获取输入字符串的长度if (length == 0) return 0; // 如果字符串为空,返回0// 分配动态规划数组,dp[i] 表示前 i 个字符的解码方法数int* dp = (int*)calloc(length + 1, sizeof(int));dp[0] = 1; // 空字符串有一种解码方式// 初始化第一个字符的解码方法数if (nums[0] > '0' && nums[0] <= '9') {dp[1] = 1; // 如果第一个字符是有效的数字(1-9),有一种解码方式} else {return 0; // 如果第一个字符无效(如 '0'),直接返回0}// 遍历字符串,计算每个位置的解码方法数for (int i = 1; i < length; i++) {// 将当前字符和前一个字符组合成一个两位数int two = (nums[i-1] - '0') * 10 + (nums[i] - '0');// 如果当前字符是 '0'if (nums[i] == '0') {// 如果两位数无效(如 '00' 或大于 '26'),返回0if (two == 0 || two >= 30) {return 0;}// 当前位置的解码方法数等于前两个字符的解码方法数dp[i+1] = dp[i-1];} // 如果两位数在 11 到 26 之间,可以解码为一个字母else if (two >= 11 && two <= 26) {// 当前位置的解码方法数等于前一个字符和前两个字符的解码方法数之和dp[i+1] = dp[i] + dp[i-1];} // 其他情况,当前字符单独解码else {dp[i+1] = dp[i];}}// 获取最终结果int result = dp[length];free(dp); // 释放动态规划数组return result;
}int main() {char nums[] = "226"; // 示例输入int result = solve(nums); // 调用解码函数printf("Number of ways to decode: %d\n", result); // 打印结果return 0;
}

复杂度分析

  • 时间复杂度:(O(n)),其中 (n) 是字符串的长度。我们只需要遍历一次字符串即可。
  • 空间复杂度:(O(n)),用于存储动态规划数组 dp

总结

本题通过动态规划的方法,将问题分解为子问题,逐步求解。通过状态转移方程,我们可以有效地计算出所有可能的译码结果。这题最傻逼的就是如何处理0,还好只要考虑“00”到“99”一百种情况。所以不需要考虑太多。

http://www.yayakq.cn/news/393006/

相关文章:

  • wordpress个人简历模板上海网站建设seodian
  • 吉安做网站的公司wordpress缩 图
  • 怎么做下载类的网站吗电子商务网站与建设实践报告
  • 温州企业建站系统汽车行业网站建设维护服务
  • 怎么做可以支付的网站展厅设计说明100字
  • 网上怎么做网站赚钱可不可以建网站做微商
  • 专业网页制作网站推广公司众讯 网站建设
  • 衡水做网站的公司在哪个网站找水利工地做
  • wordpress音乐站商丘做网站推广的公司
  • 京东企业集团网站建设方案免费推广手段有哪些
  • 如何做设计师个人网站龙华网站建设方案咨询
  • 怎么在自己的电脑上做网站如何用域名建网站
  • 湖南的商城网站建设代理浏览器
  • 绍兴市网站建设公司山东临沂建筑模板生产厂家
  • 产品宣传网站开发租网站服务器
  • 晋城购物网站开发设计专业的常州做网站
  • 站长源码wordpress设置文件大小
  • 做网站代理去拉人wordpress 手机短信
  • 化妆品网站建设项目计划书写公众号怎么挣钱
  • 万网有域名怎么建网站杭州建设工程招投标
  • 网站建设留言板实验心得网站做多宽
  • 网站设计公司石家庄wordpress QQ登录注册
  • 检察院门户网站建设自查报告网站备案怎么更改
  • 网站建设管理员工工资多少旅游类网站设计模板下载
  • 陕西东盟建设工程有限公司网站招标网站免费
  • 网站建设公司专业公司排名网站域名去哪里备案
  • 如何建单位内部购物网站wordpress防镜像
  • 建设厅教育培训网站在遵义找工作去哪里找好找
  • 网站制作与网页制作营销型网站的盈利模式
  • 盘州网站建设安康学院费用