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

【C++数论】880. 索引处的解码字符串|2010

本文涉及知识点

数论:质数、最大公约数、菲蜀定理

LeetCode880. 索引处的解码字符串

给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时,从编码字符串中 每次读取一个字符 ,并采取以下步骤:
如果所读的字符是字母,则将该字母写在磁带上。
如果所读的字符是数字(例如 d),则整个当前磁带总共会被重复写 d-1 次。
现在,对于给定的编码字符串 s 和索引 k,查找并返回解码字符串中的第 k 个字母。
示例 1:
输入:s = “leet2code3”, k = 10
输出:“o”
解释:
解码后的字符串为 “leetleetcodeleetleetcodeleetleetcode”。
字符串中的第 10 个字母是 “o”。
示例 2:
输入:s = “ha22”, k = 5
输出:“h”
解释:
解码后的字符串为 “hahahaha”。第 5 个字母是 “h”。
示例 3:
输入:s = “a2345678999999999999999”, k = 1
输出:“a”
解释:
解码后的字符串为 “a” 重复 8301530446056247680 次。第 1 个字母是 “a”。
提示:
2 <= s.length <= 100
s 只包含小写字母与数字 2 到 9 。
s 以字母开头。
1 <= k <= 109
题目保证 k 小于或等于解码字符串的长度。
解码后的字符串保证少于 263 个字母。

数论

str记录所有字符串,int数组d记录所有数字。比如:ab3e1,则str = {“ab”,“e”},d = {3,1}。
long long数组len[i]记录各操作后的字符串的长度。
len[0]=0
{ l e n [ 2 i + 1 ] = l e n [ 2 i ] + s t r [ i ] . l e n g t h 奇数 l e n [ 2 i + 2 ] = l e n [ 2 i + 1 ] ∗ d [ i ] 偶数 \begin{cases} len[2i+1] = len[2i] + str[i].length && 奇数\\ len[2i+2] = len[2i+1]*d[i] && 偶数\\ \end{cases} {len[2i+1]=len[2i]+str[i].lengthlen[2i+2]=len[2i+1]d[i]奇数偶数
f(x)函数的定义:
len[i1] > x ,且i1最小
如果i1是奇数,return str[i1/2][x-len[i1-1]]。
如果i1是偶数:return f(x % len[i1-1])。
最终调用:f(k-1)。

代码

核心代码

class Solution {public:string decodeAtIndex(string s, int k) {const int N = s.length();vector<string> strs;vector<int> d;for (int i = 0; i < N;) {string str;while ((i < N) && isalpha(s[i])) {str += s[i]; i++;}strs.emplace_back(str);if ((i < N) && isdigit(s[i])) {d.emplace_back(s[i] - '0'); i++;}}if (d.size() < strs.size()) {d.emplace_back(1);}vector<long long> lens = { 0 };for (int i = 0; i < strs.size(); i++) {lens.emplace_back(lens.back() + strs[i].length());lens.emplace_back(lens.back() * d[i]);}function<char(int)> f = [&](long long x) {int i1 = upper_bound(lens.begin(), lens.end(), x)-lens.begin();if (i1 & 1) {return strs[i1 / 2][x - lens[i1 - 1]];}return f(x % lens[i1 - 1]);};return string(1,f(k - 1));}};

单元测试

string s;int k;TEST_METHOD(TestMethod1){s = "a1", k = 1;auto res = Solution().decodeAtIndex(s, k);AssertEx(string("a"), res);}TEST_METHOD(TestMethod2){s = "abc", k = 1;auto res = Solution().decodeAtIndex(s, k);AssertEx(string("a"), res);}TEST_METHOD(TestMethod11){s = "leet2code3", k = 10;auto res = Solution().decodeAtIndex(s,k);AssertEx(string("o"), res);}TEST_METHOD(TestMethod12){s = "ha22", k = 5;auto res = Solution().decodeAtIndex(s, k);AssertEx(string("h"), res);}TEST_METHOD(TestMethod13){s = "a2345678999999999999999", k = 1;auto res = Solution().decodeAtIndex(s, k);AssertEx(string("a"), res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

相关文章:

【C++数论】880. 索引处的解码字符串|2010

本文涉及知识点 数论&#xff1a;质数、最大公约数、菲蜀定理 LeetCode880. 索引处的解码字符串 给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时&#xff0c;从编码字符串中 每次读取一个字符 &#xff0c;并采取以下步骤&#xff1a; 如果所读的字符是…...

C++/stack_queue

目录 1.stack 1.1stack的介绍 1.2stack的使用 练习题&#xff1a; 1.3stack的模拟实现 2.queue的介绍和使用 2.1queue的介绍 2.2queue的使用 2.3queue的模拟实现 3.priority_queue的介绍和使用 3.1priority_queue的介绍 3.2priority_queue的使用 欢迎 1.stack 1.1stack…...

浅谈APP之历史股票通过echarts绘图

浅谈APP之历史股票通过echarts绘图 需求描述 今天我们需要做一个简单的历史股票收盘价格通过echarts进行绘图&#xff0c;效果如下&#xff1a; 业务实现 代码框架 代码框架如下&#xff1a; . 依赖包下载 我们通过网站下载自己需要的涉及的图标&#xff0c;勾选之后进…...

Ubuntu 20.04 x64下 编译安装ffmpeg

试验的ffmpeg版本 4.1.3 本文使用的config命令 ./configure --prefixhost --enable-shared --disable-static --disable-doc --enable-postproc --enable-gpl --enable-swscale --enable-nonfree --enable-libfdk-aac --enable-decoderh264 --enable-libx265 --enable-libx…...

【橘子Kibana】Kibana的分析能力Analytics简易分析

一、kibana是啥&#xff0c;能干嘛 我们经常会用es来实现一些关于检索&#xff0c;关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI&#xff0c;你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…...

【STM32】-TTP223B触摸开关

前言 本文章旨在记录博主STM32的学习经验&#xff0c;我自身也在不断的学习当中&#xff0c;如果文章有写的不对的地方&#xff0c;欢迎各位大佬批评指正。 准备工作 今天这篇文章介绍的是触摸开关这一外围硬件。 ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LE…...

三星手机人脸识别解锁需要点击一下电源键,能够不用点击直接解锁吗

三星手机的人脸识别解锁功能默认需要滑动或点击屏幕来解锁。这是为了增强安全性&#xff0c;防止误解锁的情况。如果希望在检测到人脸后直接进入主界面&#xff0c;可以通过以下设置调整&#xff1a; 打开设置&#xff1a; 进入三星手机的【设置】应用。 进入生物识别和安全&a…...

Frida使用指南(三)- Frida-Native-Hook

1.Process、Module、Memory基础 1.Process Process 对象代表当前被Hook的进程,能获取进程的信息,枚举模块,枚举范围等 2.Module Module 对象代表一个加载到进程的模块(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件), 能查询模块的信息,如模块的基址、名…...

网络安全 | F5-Attack Signatures-Set详解

关注&#xff1a;CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集&#xff1a;使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于&#xff0c;可以专注于定义用户感兴趣的攻击签名…...

004 mybatis基础应用之全局配置文件

文章目录 配置内容properties标签typeAlias标签mappers标签 配置内容 SqlMapConfig.xml中配置的内容和顺序如下&#xff1a; properties&#xff08;属性&#xff09; settings&#xff08;全局配置参数&#xff09; typeAliases&#xff08;类型别名&#xff09; typeHandler…...

【岛屿个数——BFS / DFS,“外海”】

题目 推荐阅读 AcWing 4959. 岛屿个数&#xff08;两种解法&#xff0c;通俗解释&#xff09; - AcWing 1.岛屿个数 - 蓝桥云课 (lanqiao.cn) 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second int dx4[4] {-1, 0, 1, 0}, dy4[4] …...

MySQL常用数据类型和表的操作

文章目录 (一)常用数据类型1.数值类2.字符串类型3.二进制类型4.日期类型 (二)表的操作1查看指定库中所有表2.创建表3.查看表结构和查看表的创建语句4.修改表5.删除表 (三)总代码 (一)常用数据类型 1.数值类 BIT([M]) 大小:bit M表示每个数的位数&#xff0c;取值范围为1~64,若…...

2025_1_27 C语言内存,递归,汉诺塔问题

1.c程序在内存中的布局 代码段&#xff08;Code Segment&#xff09; 位置&#xff1a;通常位于内存的最低地址。 用途&#xff1a;存储程序的可执行指令。 特点&#xff1a;只读&#xff0c;防止程序运行时被修改。数据段&#xff08;Data Segment&#xff09; 位置&#xf…...

开源音乐管理软件Melody

本文软件由网友 heqiusheng 推荐。不过好像已经是一年前了 &#x1f602; 简介 什么是 Melody &#xff1f; Melody 是你的音乐精灵&#xff0c;旨在帮助你更好地管理音乐。目前的主要能力是帮助你将喜欢的歌曲或者音频上传到音乐平台的云盘。 主要功能包括&#xff1a; 歌曲…...

Nginx开发01:基础配置

一、下载和启动 1.下载、使用命令行启动&#xff1a;Web开发&#xff1a;web服务器-Nginx的基础介绍&#xff08;含AI文稿&#xff09;_nginx作为web服务器,可以承担哪些基本任务-CSDN博客 注意&#xff1a;我配置的端口是81 2.测试连接是否正常 访问Welcome to nginx! 如果…...

【TCP 协议】确认应答机制 超时重传 三次握手 四次挥手

TCP报文首部 确认应答机制 TCP 是可靠的&#xff0c;指的是它能够确保数据从源端准确无误地传输到目的端。 当客户端和服务器通信时&#xff0c;客户端向服务器发送报文&#xff0c;那么&#xff0c;客户端怎么知道服务器已经收到报文了呢&#xff1f; 服务器收到客户端发的报…...

jenkins-k8s pod方式动态生成slave节点

一. 简述&#xff1a; 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式&#xff0c;Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务&#xff0c;从而充分利用集群资源并实现更好的隔离性…...

基于vue和elementui的简易课表

本文参考基于vue和elementui的课程表_vue实现类似课程表的周会议列表-CSDN博客&#xff0c;原程序在vue3.5.13版本下不能运行&#xff0c;修改两处&#xff1a; 1&#xff09;slot-cope改为v-slot 2&#xff09;return background-color:rgb(24 144 255 / 80%);color: #fff; …...

可用的IPv6公共DNS(2025年1月更新)

境内IPv6 DNS&#xff1a; 1. 腾讯DNS&#xff1a;2402:4e00:: 2. 阿里DNS&#xff1a;2400:3200::1、2400:3200:baba::1 3. ISP&#xff08;电信服务运营商&#xff09;的IPv6 DNS&#xff0c;请以各ISP实际下发的为准&#xff0c;或拨打10000、10010、10086等号码询问人工…...

c高级复习

c高级复习...

电子信息工程专业主要研究哪一方面东西?

序言&#xff1a; 如今科技发展那叫一个迅猛&#xff0c;电子信息专业可是站在这股浪潮的 C 位&#xff0c;狠狠推动着社会向前跑。这专业就像一座神奇桥梁&#xff0c;把虚拟数字和现实生活紧紧相连&#xff0c;把那些信号变成咱们看到的画面、听到的声音。你看&#xff0c;从…...

RU 19.26安装(手工安装各个补丁)

使用手工方式打RU19.26 参考文档&#xff1a; Supplemental Readme - Grid Infrastructure Release Update 12.2.0.1.x / 18c /19c (Doc ID 2246888.1) 操作步骤&#xff1a; 1 Stop the CRS managed resources running from DB homes. 2 Run the pre root script. 3 Patch GI…...

深入理解Pytest中的Setup和Teardown

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 对于简单程序而言&#xff0c;使用 Pytest 运行测试直截了当。然而&#xff0c;当你…...

如何利用AI工具来进行数据分析

利用AI工具进行数据分析可以显著提高效率和准确性&#xff0c;以下是详细步骤和方法&#xff1a; 1. 明确分析目标 在开始数据分析之前&#xff0c;首先需要明确分析的目标和问题。这包括确定需要解决的问题、期望的见解或结果&#xff0c;以及选择合适的AI工具和方法。 2. …...

具身智能体俯视全局的导航策略!TopV-Nav: 解锁多模态语言模型在零样本目标导航中的顶视空间推理潜力

作者&#xff1a;Linqing Zhong, Chen Gao, Zihan Ding, Yue Liao, Si Liu 单位&#xff1a;北京航空航天大学&#xff0c;新加坡国立大学&#xff0c;香港中文大学多模态实验室 论文标题&#xff1a;TopV-Nav: Unlocking the Top-View Spatial Reasoning Potential of MLLM …...

npm:升级自身时报错:EBADENGINE

具体报错信息如下&#xff1a; 1.原因分析 npm和当前的node版本不兼容。 // 当前实际版本: Actual: {"npm":"10.2.4","node":"v20.11.0"}可以通过官网文档查看与自己 node 版本 兼容的是哪一版本的npm&#xff0c;相对应进行更新即可…...

微信小程序实现自定义日历功能

文章目录 1. 创建日历组件实现步骤&#xff1a;2. 代码实现过程3. 实现效果图4. 关于作者其它项目视频教程介绍 1. 创建日历组件实现步骤&#xff1a; 创建日历组件&#xff1a;首先&#xff0c;你需要创建一个日历组件&#xff0c;包含显示日期的逻辑。样式设计&#xff1a;为…...

Vue 3 中的 toRef 与 toRefs:使用与案例解析

在 Vue 3 的响应式系统中&#xff0c;toRef 和 toRefs 是两个非常实用的工具函数。它们主要用于将响应式对象的属性转换为单独的 ref&#xff0c;以便在模板或逻辑中更方便地使用。本文将详细介绍 toRef 和 toRefs 的用法&#xff0c;并通过一个老师信息的案例来演示它们的实际…...

问题修复记录:Linux docker 部署 dify,无法调用宿主机本地服务

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

代码随想录day20

235. 利用二叉搜索树的特性即可 /** lc appleetcode.cn id235 langcpp** [235] 二叉搜索树的最近公共祖先*/// lc codestart /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) :…...