算法---动态规划-3(解码方法)

news2024/12/27 11:49:47

解码方法

  • 1. 题目解析
  • 2. 讲解算法原理
  • 3. 编写代码

1. 题目解析

题目地址:点这里

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述


  1. 首先,通过字符串s的大小确定字符串的长度为n,并创建一个长度为n的动态规划数组dp。

  2. 处理特殊情况:如果字符串s的长度为1,那么只有当s[0]不等于零时才有一种解码方法,否则没有解码方法。

  3. 初始化动态规划数组dp的前两个元素dp[0]和dp[1]。

  • 如果s[0]不等于零,那么dp[0]初始化为1,表示第一个字符可以单独解码
  • 如果s[0]和s[1]都不等于零,那么dp[1]初始化为1,表示前两个字符可以分别单独解码。
  • 如果前两个字符可以组成一个大于等于10且小于等于26的数字,那么dp[1]再加1,表示前两个字符可以作为一个整体解码
  1. 接下来,从下标2开始填表。对于每个下标i,计算dp[i]的值:
  • 定义两个变量a和b,初始化为0。
  • 如果当前字符s[i]不等于零,说明它可以单独解码,将dp[i-1]的值赋给a。
  • 将前两个字符s[i-1]和s[i]组成的两位数d计算出来。
    • 如果d大于等于10且小于等于26,说明这两个字符可以作为一个整体解码,将dp[i-2]的值赋给b。
  • 计算dp[i]的值为a+b,表示当前字符可以单独解码或与前一个字符组成一个整体解码的方法数量
  1. 最后,返回动态规划数组dp的最后一个元素dp[n-1],即整个字符串的解码方法数量

3. 编写代码

class Solution {
public:
    int numDecodings(string s) {
        int n=s.size();
        vector<int> dp(n);
        //处理特殊情况
        if(n==1 ) 
        {
            if(s[0]!='0') return 1;
            else return 0;
        }
        //初始化(下标0和1)
        if(s[0]!='0') dp[0]=1;
        else dp[0]=0;

        if(s[0]!='0' && s[1]!='0')dp[1]+=1;
        int t=(s[0]-'0')*10+(s[1]-'0');
        if(t>=10 && t<=26) dp[1]+=1;
        //填表
        for(int i=2;i<n;i++)
        {
            int a=0,b=0;
            int d=(s[i-1]-'0')*10+(s[i]-'0');
            if(s[i]!='0') a=dp[i-1];
            if(d>=10 && d<=26) b=dp[i-2];
            dp[i]=a+b;
        }  
        return dp[n-1];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1547245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《量子计算:揭开未来科技新篇章》

随着科技的不断发展&#xff0c;量子计算作为一项颠覆性的技术逐渐走进人们的视野&#xff0c;引发了广泛的关注和探讨。本文将围绕量子计算的技术进展、技术原理、行业应用案例、未来趋势预测以及学习路线等方向&#xff0c;深入探讨这一领域的前沿动态和未来发展趋势。 量子…

基于nodejs+vue健身俱乐部网站python-flask-django-php

随着社会的发展&#xff0c;健身俱乐部的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;健身信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得本健身俱乐部管理信息&#xff0c;因此&#xff0c;设计一种安全高效的健身俱乐部网站极为重…

Uniapp三种常用提示框

具体参数方法可参考: uniapp交互反馈 uni.showToast(OBJECT) //显示消息提示框。 uni.hideToast() //隐藏消息提示框。 //具体使用 uni.showToast({title: 新增成功,duration: 2000 }); uni.showLoading(OBJECT) //显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提…

GitLab更新失败(CentOS)

使用yum更新GitLab&#xff0c;出现如下错误提示&#xff1a; Error: Failed to download metadata for repo gitlab_gitlab-ce: repomd.xml GPG signature verification error: Bad GPG signature 编写如下脚本&#xff1a; for pubring in /var/cache/dnf/gitlab_gitlab-?…

【排序算法】深入解析快速排序(霍尔法三指针法挖坑法优化随机选key中位数法小区间法非递归版本)

文章目录 &#x1f4dd;快速排序&#x1f320;霍尔法&#x1f309;三指针法&#x1f320;挖坑法✏️优化快速排序 &#x1f320;随机选key&#x1f309;三位数取中 &#x1f320;小区间选择走插入&#xff0c;可以减少90%左右的递归&#x1f309; 快速排序改非递归版本&#x1…

图论最短路径以及floyd算法的MATLAB实现

图论是数学的一个分支&#xff0c;起源于18世纪。1736年&#xff0c;数学家欧拉通过解决“哥尼斯堡七桥问题”&#xff0c;将问题抽象成点和线的关系&#xff0c;并通过理论分析得出结论&#xff0c;这个过程标志着图论的产生&#xff0c;欧拉也因此被称为“图论之父”。图论研…

pandas 函数

pandas是基于numpy数组构建的&#xff0c;但二者最大的不同是pandas是专门为处理表格和混杂数据设计的&#xff0c;比较契合统计分析中的表结构&#xff0c;而numpy更适合处理统一的数值数组数据。pandas数组结构有一维Series和二维DataFrame。 Series的字符串表现形式为&#…

Nacos安装指南(包含Windows、Linux、Mac安装指南)

Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载…

Web APIs 学习知识总结

渲染学成在线案例 html文件: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Com…

数学建模之MATLAB使用

1.数值计算和符号计算的认识 我们都知道MATLAB里面存在着数值计算和符号计算&#xff0c;但是两者之间到底是怎样的呢&#xff1f; 举一个很简单的例子&#xff0c;我们在高等数学里面的微积分学习时经常求不定积分&#xff0c;也就是原函数&#xff0c;这个过程实际上进行的…

搭建hive环境,并解决后启动hive命令报 hive: command not found的问题

一、问题解决 1、问题复现 2、解决问题 查阅资料得知该问题大部分是环境变量配置出了问题&#xff0c;我就输入以下命令进入配置文件检查自己的环境变量配置&#xff1a; [rootnode03 ~]# vi /etc/profile 检查发现自己的hive配置没有问题 &#xff0c;于是我就退出&#xf…

Eclipse新建java类的操作流程

一、在左侧空白区域&#xff0c;点击鼠标右键。 二、点击new&#xff0c;选择Java Project &#xff08;由于这里不知道怎么截图&#xff0c;就用手机拍了一张&#xff0c;希望不要介意&#xff09; 三、 给project文件起个名字&#xff0c;其他都不用管&#xff0c;点击Finis…

HTML(一)---【基础】

零.前言&#xff1a; 本文章对于HTML的基础知识处理的十分细节&#xff0c;适合从头学习的初学者&#xff0c;亦或是想要提升基础的前端工程师。 1.什么是HTML&#xff1f; HTML是&#xff1a;“超文本标签语言”&#xff08;Hyper Text Markup Language&#xff09; HTML不…

MySQL学习笔记|基础(一)|MySQL概述、Mac OS M2芯片Mysql的安装和配置、MySQL数据库数据模型

文章目录 概念安装和配置安装报错 MySQL的启停和状态的查看MySQL数据库数据模型 概念 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操纵关系型数据库的编程…

基于nodejs+vue在线政务服务中心python-flask-django-php

最后要对系统进行测试&#xff0c;还要对测试的结果进行总结和分析&#xff0c;为以后系统的维护提供方便&#xff0c;也为以后类似系统的开发提供参考和帮助。这种个性化的网络系统管理更重视相互协调和管理合作,能激发管理者的创造性和主动性,这对在线政务服务中心管理系统来…

第三十一天-Flask-ORM-sqlalchemy

目录 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 ​编辑 4.插入修改删除 5.查询 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 4.插入修改删除 5.查询

python基础语法--快速入门

目录 一、字面量1.1定义 二、关键字三、注释四、引号五、输入输出六、缩进七、数据类型转换八、标识符九、运算符 一、字面量 1.1定义 字面量&#xff1a;在代码中&#xff0c;被写下来的固定的值。 python中哪些值可以被写下来&#xff0c;如何在代码中写他们呢&#xff1f;…

【GameFramework框架内置模块】19、Web请求(Web Request)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a;…

web端复制文本

安装clipboard npm install clipboard --save 实现代码 import Clipboard from clipboard; copy() {var clipboard new Clipboard(.copybox)clipboard.on(success, e > {// console.log(复制成功,e)this.$message.success(复制成功)// 释放内存clipboard.destroy()})cli…

多层感知机-----自我神经MLP入门笔记

多层感知机&#xff08;Multilayer Perceptron, MLP&#xff09;是一种常见的人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;模型&#xff0c;它由多个人工神经元组成的多层结构。每个神经元都与前一层的所有神经元连接&#xff0c;并且每条连接都有一个…