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

从递归到动态规划-解码方法

解码方法

在这里插入图片描述

Solution

#include<iostream>
#include<vector>
using namespace std;//简单递归,从最基本的递归当中寻找尝试策略
int f1(string s, int i) {if (i >= s.length()) return 1;int ans;if (s[i] == '0') {ans = 0;}else {ans = f1(s, i + 1);if (i + 1 < s.length() && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {ans += f1(s, i + 2);}}return ans;
}//带缓存表的递归
int f2(string s, int i, vector<int>& dp) {if (i >= s.length()) return 1;if (dp[i] != -1) return dp[i];int ans;if (s[i] == '0') {ans = 0;}else {ans = f2(s, i + 1, dp);if (i + 1 < s.length() && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {ans += f2(s, i + 2, dp);}}dp[i] = ans;return ans;
}//从递归到dp
int f3(string s) {int n = s.length();vector<int>dp(n + 1, 0);dp[n] = 1;for (int i = n - 1; i >= 0; --i) {if (s[i] == '0') dp[i] = 0;else {dp[i] = dp[i + 1];if (i + 1 < n && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {dp[i] += dp[i + 2];}}}return dp[0];
}//dp再优化,滚动更新节省内存
int f4(string s) {int n = s.length();int last=1, last_last, ans;//注意这里的初始化,要对照原来优化前的dp初始化来for (int i = n - 1; i >= 0; --i) {if (s[i] == '0') ans = 0;else {ans = last;if (i + 1 < n && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {ans += last_last;}}last_last = last;last = ans;}return ans;
}
int numDecodings1(string s) {return f1(s, 0);
}
int numDecodings2(string s) {vector<int>dp(s.length(), -1);return f2(s, 0, dp);
}
int numDecodings3(string s) {return f3(s);
}
int numDecodings4(string s) {return f4(s);
}
int main() {return 0;
}
http://www.dtcms.com/a/311419.html

相关文章:

  • Json Jsoncpp
  • 深入 Go 底层原理(十四):timer 的实现与高性能定时器
  • python JSONPath 表达式生成器
  • 淘宝获取商品SKU详情API接口操作指南
  • 交互 Codeforces Round 1040 Interactive RBS
  • 开发指南128-基础类-BaseDAO
  • 力扣面试150题--回文数
  • ABP VNext + NATS JetStream:高性能事件流处理
  • FPGA kernel 仿真器调试环境搭建
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 「iOS」————SideTable
  • 基于Dockerfile 部署一个 Flask 应用
  • WAIC引爆AI,智元机器人收购上纬新材,Geek+上市,157起融资撑起热度|2025年7月人工智能投融资观察 · 极新月报
  • 【传奇开心果系列】Flet框架流式输出和实时滚动页面的智能聊天机器人自定义模板
  • github在界面创建tag
  • 性能测试-性能测试中的经典面试题二
  • 超级人工智能+无人机操控系统,振兴乡村经济的加速器,(申请专利应用),严禁抄袭!
  • spring-ai-alibaba 学习(十九)——graph之条件边、并行节点、子图节点
  • linux编译基础知识-库文件标准路径
  • Docker 的网络模式
  • 3 使用 Jenkins 构建镜像:将你的应用打包成镜像
  • 【20min 急速入门】使用Demucs进行音轨分离
  • ffmpeg命令和ffplay命令详解
  • Java高性能编程实践指南
  • ARM Cortex-M异常处理高级特性详解
  • OpenCV 全解读:核心、源码结构与图像/视频渲染能力深度对比
  • [硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题
  • 网络编程之原始套接字
  • Anthropic:跨越生产效能拐点的AI增长飞轮
  • [硬件电路-123]:模拟电路 - 信号处理电路 - 常见的高速运放芯片、典型电路、电路实施注意事项