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

力扣精选算法100道——Z字形变换(模拟专题)

目录

🎈了解题意

🎈算法原理

🚩先处理第一行和最后一行

🚩再处理中间行

🎈实现代码


🎈了解题意

大家看到这个题目的时候肯定是很迷茫的,包括我自己也是搞不清楚题目什么意思,我们静下心来看看我来给大家说透彻这个题目的意思。

我们输入字符串"ABCDEFGHIJKL",行数是四行时,我们是按照Z字形排列。先向下排四行,然后斜向上排列到四行之后,然后向下排列四行......。(我们用一块一块的方格来填字符)

然后我们输出的是像数组一样遍历 输出结果是 AGBFHLCEIKDJ 字符串。


🎈算法原理

我们举例输入的是   ABCDEFGHIJKMNOP  这段字符串,我们输出的字符串就是从第一行第一列遍历到最后一行最后一列。

🚩先处理第一行和最后一行

我们从第一行分析,我们看到 AGM之间的距离 A和G之间的距离是6,G与M之间的距离是6,我们就可以看到对于第一行来说,我们只需要循环从0开始,每次+6,就给新字符串更新结果。6是相当于公差d=6,6是怎么来的呢?

我们的公差6其实相当于,将F向左移一列,然后俩列一共是8个元素,然后减去2个空格就是公差了那么我们就衍生一个公式  公差d=2n-2 (n代表行数),举一个例子当然是不能足以证明结果,我们给n设定3行,我们看看第一行公差是不是d=2*3-2=4.

我们看到,d=2n-2,n等于3的时候d=4,公差是4,确实验证了我们的猜想。所以第一行每个元素的相差的距离是2n-2的距离(n代表行数)

        string ret;//定义个最终字符串结果int d=2*numRows-2,n=s.size();//公差为2n-2,n代表原字符串的长度//1.先处理第一行for(int i=0;i<n;i+=d)//每次都加上公差{ret+=s[i];//更新结果}

 同样的,我们看到最后一行其实和第一行是同样的原理。

        //处理最后一行for(int i=numRows-1;i<n;i+=d){ret+=s[i];}

🚩再处理中间行

我们看到BHN绿色线指向的,B和H相差6,H和N相差6,和第一行和最后一行一样的思路,那么我们中间的FL和EK紫色线画的,我们看到F和L相差的结果也是6,EK相差的结果也是6,所以还是再循环的时候加上公差d,那么我们如何确定F和E下标的值呢?还是和上面一样的,我们是如何计算公差的呢?移动数据。字符在哪一列,我们就看前面列数的总空格数减去空白格即可。

  • G= 前面有3列一共有3*4=12格  减去  前面列数的空格数6 = 6 字符G的下标是处在原字符串下标6的位置
  • F= 前面有2列一共有2*4=8格  减去  前面列数的空格数3  =5 字符F的下标是处在原字符串下标5的位置

那么F相当于2n-3=5(n等于4,三个空格),E相当于n-0=4 (n等于4,0格空格)

我们如何确定F和E的开始值呢?

对于第二行 F的下标是5,公差是6, 相当于6-1=5

对于第三行 E的下标是4 ,公差是6   相当于6-2=4

所以我们进行依次循环,处理中间行,从k=1开始,第二行的第二个元素是d-k,到k=2时,第三行的第三个元素是d-k,然后当k=n-1=3的时候就结束了,因为第四行是最后一行。

     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];}}

我们是先让i对应的值先更新,然后再更新j对应的值,条件是i<n或者j<n,因为只要其中一个满足的话,我们还是要更新结果。下面要进行判断,否则就重复更新了。 


🎈实现代码

class Solution {
public:string convert(string s, int numRows) {if(numRows==1)return s;string ret;int d=2*numRows-2,n=s.size();//1.先处理第一行for(int i=0;i<n;i+=d){ret+=s[i];}//2.处理中建行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;}
};

开学坏,见面好。

相关文章:

力扣精选算法100道——Z字形变换(模拟专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f6a9;先处理第一行和最后一行 &#x1f6a9;再处理中间行 &#x1f388;实现代码 &#x1f388;了解题意 大家看到这个题目的时候肯定是很迷茫的&#xff0c;包括我自己也是搞不清楚题目什么意思&#xff0c;我…...

Elastic Stack--01--简介、安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…...

.NET项目web自动化测试实战——Selenium 2.0

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…...

【Day53】代码随想录之动态规划_买卖股票ⅠⅡ

文章目录 动态规划理论基础动规五部曲&#xff1a;出现结果不正确&#xff1a; 1. 买卖股票的最佳时机2. 买卖股票的最佳时机Ⅱ 动态规划理论基础 动规五部曲&#xff1a; 确定dp数组 下标及dp[i] 的含义。递推公式&#xff1a;比如斐波那契数列 dp[i] dp[i-1] dp[i-2]。初…...

Swift Combine 使用调试器调试管道 从入门到精通二十六

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…...

go内置库函数实现client与server数据的发送接收

功能&#xff1a;客户端持续写入数据&#xff0c;直到输入exit退出&#xff0c;服务端读取数据并打印 注意&#xff1a;server和client目录在同一层级 服务端 server/main package mainimport ("fmt""net" )func main() {listen, err : net.Listen(&quo…...

[java基础揉碎]this

引出this: 什么是this: java虚拟机会给每个对象分配 this&#xff0c;代表当前对象。 这里的this就是new出来的这个对象 this的本质: this是个引用在堆中指向它自己: this的细节: 访问成员方法: 访问构造器:...

vulnhub靶场之Deathnote

一.环境搭建 1.靶场描述 Level - easy Description : dont waste too much time thinking outside the box . It is a Straight forward box . This works better with VirtualBox rather than VMware 2.靶场下载 https://www.vulnhub.com/entry/deathnote-1,739/ 3.启动环…...

Docker安装Postgresql12

1、搜索仓库中postgres docker search postgres 2、拉取镜像 docker pull postgres docker pull postgres:12 #拉取12版本的PG库 3、创建数据库文件夹 cd /temp/ && mkdir -m 755 postgres-data 注&#xff1a;-m表示权限&#xff0c;类chmod命令 4、执行命令启动…...

服务器防火墙的应用技术有哪些类型?

随着互联网的发展&#xff0c;网络安全问题更加严峻。服务器防火墙技术作为一种基础的网络安全技术&#xff0c;对于保障我们的网络安全至关重要。本文将介绍服务器防火墙的概念和作用&#xff0c;以及主要的服务器防火墙技术&#xff0c;包括数据包过滤、状态检测、代理服务、…...

IP地理位置查询定位:技术原理与实际应用

在互联网时代&#xff0c;IP地址是连接世界的桥梁&#xff0c;而了解IP地址的地理位置对于网络管理、个性化服务以及安全监控都至关重要。IP数据云将深入探讨IP地理位置查询定位的技术原理、实际应用场景以及相关的隐私保护问题&#xff0c;旨在为读者提供全面了解和应用该技术…...

hbuilder运行不了php文件是什么原因?

如果 HBuilder 无法运行 PHP 文件&#xff0c;可能是由于以下几个常见原因导致的&#xff1a; 未安装 PHP 解释器&#xff1a; HBuilder 需要安装 PHP 解释器才能运行 PHP 文件。请确保您的系统中已经安装了 PHP&#xff0c;并且已正确配置了环境变量。 PHP 解释器路径错误&…...

C++从入门到精通 第十六章(STL常用算法)

写在前面&#xff1a; 本系列专栏主要介绍C的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程&#xff0c;笔者的原创部分主要在示例代码的注释部分。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C教材&#xff08;比…...

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】时间复杂度 | 空间复杂度

目录 1 -> 算法效率 1.1 -> 如何衡量一个算法的好坏&#xff1f; 1.2 -> 算法的复杂度 2 -> 时间复杂度 2.1 -> 时间复杂度的概念 2.2 -> 大O的渐进表示法 2.3 -> 常见时间复杂度计算 3 -> 空间复杂度 4 -> 常见复杂度对比 1 -> 算法效…...

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 项目成员岑灌铭同学创作。 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略&#xff0c;每个应用可以选择不同的技术栈&#xff0c;独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端十…...

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中&#xff0c;使用非gui的方式执行jmeter。若需更改参数&#xff0c;必须先编辑jmx文件&#xff0c;找到对应的变量进行修改&#xff0c;比较麻烦。因此&#xff0c;可以参数化一些常用的变量&#xff0c;直接在Jmeter命令行进行设置 二、参数…...

C++跨模块释放内存

linux一个进程只有一个堆&#xff0c;不要考虑这些问题&#xff0c;但是windows一个进程可能有多个堆&#xff0c;要在对应的堆上释放。 一&#xff0c; MT改MD 一个进程的地址空间是由一个可执行模块和多个DLL模块构成的&#xff0c;这些模块中&#xff0c;有些可能会链接到…...

jQuery浅析

jQuery 是一个快速、简洁的 JavaScript 库&#xff0c;旨在简化 HTML 文档遍历、事件处理、动画以及 Ajax 交互等功能。由 John Resig 在2006年创建&#xff0c;它极大地简化了JavaScript开发人员在处理网页文档、选择DOM元素以及执行各种效果和功能时的工作。 核心特性&#x…...

分班问题 、幼儿园分班(C语言)

题目 幼儿园两个班的小朋友排队时混在了一起&#xff0c;每个小朋友都知道自己跟前面一个小朋友是不是同班&#xff0c;请你帮忙把同班的小朋友找出来 小朋友的编号为整数&#xff0c;与前面一个小朋友同班用Y表示&#xff0c;不同班用N表示 输入 输入为空格分开的小朋友编号…...

QT 如何让多语言翻译变得简单,提高效率?

一.QT多语言如何翻译的? 在QT的多语言翻译过程中,分为两个步骤:第一步生成ts文件,第二步将ts文件翻译为qm文件。如果我们在需要多语言的情况下,qml经常使用qstr或者qwidget中使用tr等等,遍布许多个文件夹,在需要更新新的翻译时会很麻烦。整个工程收索并修改,效率十分低…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...