力扣精选算法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;
    }
};

开学坏,见面好。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R cox回归 ggDCA报错

临床预测模型的决策曲线分析&#xff08;DCA&#xff09;&#xff1a;基于ggDCA包 决策曲线分析法&#xff08;decision curve analysis&#xff0c;DCA&#xff09;是一种评估临床预测模型、诊断试验和分子标记物的简单方法。 我们在传统的诊断试验指标如&#xff1a;敏感性&a…

游戏同步+游戏中的网络模块

原文链接&#xff1a;游戏开发入门&#xff08;九&#xff09;游戏同步技术_游戏数据同步机制流程怎么开发-CSDN博客 游戏开发入门&#xff08;十&#xff09;游戏中的网络模块_游戏开发组网-CSDN博客 3.同步技术的基本常识&#xff1a; a.同步给谁&#xff1f;某个用户&…

Day04 嵌入式---基本定时器

定时器概述 1、软件定时原理 使⽤纯软件的⽅式实现定时功能。 存在的问题&#xff1a;定时不太精准。CPU死等。 1&#xff09;压栈出栈需要花费时间 2&#xff09;ARM流⽔线体系架构的原因 2、定时器定时原理 使用精准的时基&#xff0c;通过硬件方式&#xff0c;实现定…

力扣日记2.21-【回溯算法篇】46. 全排列

力扣日记&#xff1a;【回溯算法篇】46. 全排列 日期&#xff1a;2023.2.21 参考&#xff1a;代码随想录、力扣 46. 全排列 题目描述 难度&#xff1a;中等 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&…

Spring6学习技术|IoC|手写IoC

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; 有关反射的知识回顾 IoC是基于反射机制实现的。 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&…

P2957 [USACO09OCT] Barn Echoes G

P2957 [USACO09OCT] Barn Echoes G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2957 题目分析 对于求单个字符串的哈希值相当于求前缀和&#xff0c;而求单个字符串的子串的哈希值则相当于求其区间和&#xff1b; 那么只需求两个…

面试经典150题——旋转图像

"You are never too old to set another goal or to dream a new dream." - C.S. Lewis​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 还是最简单的尝试模拟人的思维&#xff0c;如果对于一个普通人解决该题目&#xff0c;那就是先把第一行放在最后一列 或者 把第…

入职字节外包才一个月,我就离职了

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

惠尔顿 网络安全审计系统 任意文件读取漏洞复现

0x01 产品简介 惠尔顿网络安全审计产品致力于满足军工四证、军工保密室建设、国家涉密网络建设的审计要求&#xff0c;规范网络行为&#xff0c;满足国家的规范&#xff1b;支持1-3线路的internet接入、1-3对网桥&#xff1b;含强大的上网行为管理、审计、监控模块&#xff1b…

猫毛过敏不能养猫了吗?除猫毛好的宠物空气净化器品牌有哪些?

让我们来探讨一下如何让容易过敏的家庭成员和猫咪更好地相处。很多人喜欢猫咪&#xff0c;但与它们相处一段时间后&#xff0c;可能会出现鼻塞、喷嚏和眼泪不断的过敏症状。那么&#xff0c;为什么会过敏呢&#xff1f;这是因为猫的唾液中含有Fel d1蛋白质&#xff0c;当它们舔…

回显服务器的制作方法

文章目录 客户端和服务器TCP和UDP的特点UDP socket api的使用DatagramSocketDatagramPacketInetSocketAddress API 做一个简单的回显服务器UDP版本的回显服务器TCP版本的回显服务器 客户端和服务器 在网络中&#xff0c;主动发起通信的一方是客户端&#xff0c;被动接受的这一方…

SpringBoot+Vue+MySQL:图书管理系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

怀孕了要把猫送走吗?推荐一款吸猫毛神器—宠物空气净化器

相信大部分家庭都会遇到这样一个二选一的难题&#xff1a;怀孕了还能养猫吗&#xff1f;还是要把猫送走&#xff1f; 许多人担心在孕期与宠物接触可能会导致健康问题&#xff0c;主要是因为弓形虫的存在。然而&#xff0c;实际上感染弓形虫并不容易。如果你真的很担心&#xf…

绘图神器VisIt初步使用

文章目录 安装绘图图像属性 VisIt是一款用于可视化科学数据的开源软件&#xff0c;适用于大型数据集&#xff0c;并提供了丰富的可视化和分析功能。 安装 首先下载VisIt&#xff0c;然后下载一些示例以及测试数据&#xff0c;地址在github上。 下载之后安装&#xff0c;有两…

基于Python的热点分析预警系统

项目&#xff1a;基于Python的热点分析预警系统 摘 要 基于网络爬虫的数据可视化服务系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究爬取微博网来实现微博热点分析数据信息可视化系统功能。对于采…

二叉搜索树(二叉排序树、二叉查找树)

二叉搜索树&#xff08;二叉排序树、二叉查找树&#xff09; 一、定义二、操作&#xff08;一&#xff09;中序遍历&#xff08;二&#xff09;查找&#xff08;三&#xff09;插入&#xff08;四&#xff09;删除 三、二叉搜索树的应用四、二叉搜索树操作的性能分析五、总结 一…

CCF-B类SGP‘24 4月10日截稿!速速行动!

会议之眼 快讯 第22届SGP(Eurographics Symposium on Geometry Processing)即欧洲图形学几何处理专题讨论会将于 2024 年 6月24 -日至26日在美国麻省理工学院举行&#xff01;SGP是传播几何处理新研究想法和尖端成果的首要学术会议。作为该领域的重要学术盛事&#xff0c;SGP会…

模型转换案例学习:等效替换不支持算子

文章介绍 Qualcomm Neural Processing SDK &#xff08;以下简称SNPE&#xff09;支持Caffe、ONNX、PyTorch和TensorFlow等不同ML框架的算子。对于某些特定的不支持的算子&#xff0c;我们介绍一种算子等效替换的方法来完成模型转换。本案例来源于https://github.com/quic/qidk…

从零开始手写mmo游戏从框架到爆炸(十六)— 客户端指定回调路由与登录

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 我们这次来把注册、登录、选择英雄&#xff0c;进入主页-选择地图的功能完善。 在这之前&#xff0c;我们还要解决一个问题&#xff0c;就是服务端往客户端发消息的路由问题…

CSS 不同颜色的小圆角方块组成的旋转加载动画

<template><!-- 创建一个装载自定义旋转加载动画的容器 --><view class="spinner"><!-- 定义外部包裹容器,用于实现整体旋转动画 --><view class="outer"><!-- 定义四个内部小方块以形成十字形结构 --><view clas…