【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列

【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

《Git深度解析》:版本管理实战全解

🌟心向往之行必能至


🎥Cx330🌸的简介:


前言:

聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力

41. Z 字形变换

题目链接:

6. Z 字形变换 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(模拟):
思路:

找规律,用 row 代替行数,row = 4 时画出的 N 字形如下:
0 2row - 2 4row - 4
1 2row - 3 2row - 1 4row - 5 4row - 3
2 2row-4 2row 4row - 6 4row - 2
3 2row + 1 4row - 1

不难发现,数据是以 2row - 2 为⼀个周期进行规律变换的。将所有数替换成用周期来表示的变量:
第一行的数是:0, 2row - 2, 4row - 4;

第二行的数是:1, (2row - 2) - 1, (2row - 2) + 1, (4row - 4) - 1, (4row - 4) + 1;

第三行的数是:2, (2row - 2) - 2, (2row - 2) + 2, (4row - 4) - 2, (4row - 4) + 2;

第四行的数是:3, (2row - 2) + 3, (4row - 4) + 3。

可以观察到,第一行、第四行为差为 2row - 2 的等差数列;第二行、第三行除了第⼀个数取值为行数,每组下标为(2n - 1, 2n)的数围绕(2row - 2)的倍数左右取值。
以此规律,我们可以写出迭代算法。

模拟解法代码(C++):
class Solution { public: string convert(string s, int numRows) { string ret; int d=2*numRows-2,n=s.size(); //如果n=1直接返回原字符串 if(numRows==1) return s; //处理第一行 for(int i=0;i<n;i+=d) ret+=s[i]; //处理中间行 for(int k=1;k<numRows-1;k++) { for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d) { if(i<n) ret+=s[i]; if(j<n) ret+=s[j]; } } //处理最后一行 for(int i=numRows-1;i<n;i+=d) ret+=s[i]; return ret; } };
博主手记(字体还请见谅哈):

42. 外观数列

题目链接:

38. 外观数列 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(模拟):
思路:

所谓【外观数列】,其中只是依次统计字符串中连续且相同的字符的个数。依据题意,依次模拟即可。

模拟解法代码(C++):
class Solution { public: string countAndSay(int n) { string ret="1"; for(int i=1;i<n;i++)//解释n-1次ret { string tmp; int len=ret.size(); for(int left=0,right=0;right<len;) { while(right<len&&ret[left]==ret[right]) right++; //to_string获取元素个数 tmp+=to_string(right-left)+ret[left]; left=right; } ret=tmp; } return ret; } };
博主手记(字体还请见谅哈):

总结:

结语:本文分享了两个算法题的解题思路和C++实现。首先针对"Z字形变换"问题,通过观察字符排列规律,采用周期模拟法将字符串按特定顺序重组。其次解决"外观数列"问题,通过统计连续相同字符个数生成新字符串。两题均采用模拟解法,文章以实战为导向,简洁明了地展示了从问题分析到代码落地的完整过程。

Read more

FastAPI:Python 高性能 Web 框架的优雅之选

FastAPI:Python 高性能 Web 框架的优雅之选

目录 * FastAPI:Python 高性能 Web 框架的优雅之选 * 为什么选择 FastAPI? * 实战:构建一个优雅的博客 API * 1. 环境准备 * 2. 项目结构 * 3. 定义数据模型 (models.py) * 4. 编写 API 逻辑 (main.py) * 5. 运行与体验 * 总结 专栏导读 ❤️ 欢迎各位佬关注! ❤️ 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅 👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅 🏳️‍🌈 ZEEKLOG博客主页:请点击—

By Ne0inhk

如何用10分钟语音数据构建专业级变声模型:Retrieval-based-Voice-Conversion-WebUI全平台实践指南

如何用10分钟语音数据构建专业级变声模型:Retrieval-based-Voice-Conversion-WebUI全平台实践指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI语音数据小于等于10分钟也可以用来训练一个优秀的变声模型! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI Retrieval-based-Voice-Conversion-WebUI是一款基于VITS架构的跨平台语音转换框架,它突破性地实现了仅需10分钟语音数据即可训练高质量模型的能力,并支持NVIDIA、AMD、Intel全平台显卡加速。该框架通过创新的top1检索技术有效防止音色泄漏,结合模块化设计满足从科研实验到商业应用的多样化需求,为语音转换领域提供了高效且易用的解决方案。 零基础部署流程:三行命令完成环境配置 硬件兼容性检查 在开始部署前,需确认系统满足以下基本要求: * Python 3.8及以上版本 * 至少4G

By Ne0inhk

Vue3 Webview 转 Android 虚拟导航栏遮挡问题记录

问题描述 在 Android 设备上运行 Capacitor 打包的 Vue 3 应用时,遇到虚拟导航栏(底部返回键、主页键等)和状态栏遮挡应用内容的问题。 问题表现 * 底部 Tab 导航栏被虚拟导航栏遮挡一部分 * 顶部内容被状态栏遮挡 * 页面底部内容贴近虚拟导航栏,没有安全间距 问题根源分析 初始状态 应用使用了沉浸式布局,在 MainActivity.java 中设置了: WindowCompat.setDecorFitsSystemWindows(getWindow(),false);getWindow().setStatusBarColor(Color.TRANSPARENT);getWindow().setNavigationBarColor(Color.TRANSPARENT); 这使得 WebView 内容延伸到状态栏和导航栏后面,实现了全屏显示。 错误的假设 最初尝试使用 CSS 的环境变量来解决: padding-top:env(safe-area-inset-top,

By Ne0inhk
情侣飞行棋前端分享源码,已经网络部署可直接免费访问

情侣飞行棋前端分享源码,已经网络部署可直接免费访问

文章目录 * 情侣飞行棋 * 📋 目录 * 🎮 项目介绍 * 核心玩法 * ✨ 功能特点 * 游戏功能 * 视觉体验 * 技术亮点 * 🛠 技术栈 * 📁 文件结构 * 🎯 游戏规则 * 基本规则 * 回合流程 * 📸 界面预览 * 游戏主界面 * 棋子选中效果 * 任务弹窗 * 游戏结束画面 * 🚀 快速开始 * 环境要求 * 启动方式 * 方式一:直接打开(bug) * 方式二:本地服务器(推荐,并不复杂) * 游戏操作 * 🎨 样式亮点 * 棋子视觉效果 * 配色方案 * 响应式设计 * 🔧 扩展指南 * 添加新任务 * 修改棋子图片 * 自定义样式 * 源码分享 * 注意事项 情侣飞行棋 一款基于 Vue 3 和原生 JavaScript 开发的网页版双人飞行棋

By Ne0inhk