【算法】模拟算法——Z字形变换(medium)

题解:模拟算法——Z字形变换(medium)

目录

  • 1.题目
  • 2.题解
  • 3.参考代码
  • 4.总结

1.题目

题目链接:LINK
在这里插入图片描述

2.题解

利用模拟,来解决问题。

首先创建出一个O(numRows*n)的数组来,并按照题目要求把每个字符按顺序填进去。

这里以numRows = 4,字符串s = "abcdefghijk"为例来演示如下:
在这里插入图片描述
然后我们按每行挨个把字符加进去就行了,除了很浪费空间…

所以,我们可以总结规律来进行优化:
在这里插入图片描述
规律可以分为两部分:
第一部分是第一行和最后一行,满足如下特点:
下标从numRows-1开始,且后一个比前一个多d
第二部分是中间那些行,满足如下特点:
两两一组,下标从{k,d-k}开始,下一组比前一组多d

图解如下:
在这里插入图片描述

3.参考代码

class Solution {
public:string convert(string s, int numRows) {if(numRows == 1) return s;int n = s.size();string ret;int d = 2*numRows - 2;//先处理第一行for(int i = 0; i < n; i+=d){ret+=s[i];}//再处理中间一行for(int i = 1; i < numRows - 1; i++)//标识行{for(int j = i,k = d-i;j < n || k < n;j+=d,k+=d)//这个地方为什么用||来判定是否结束?防止一个条件满足了,另一个不满足从而导致漏字符的情况{if(j < n) ret+=s[j];//上面判断结束条件有可能是越界的,因而在加入之前应该先判断一下if(k < n) ret+=s[k];}}//处理最后一行for(int i = numRows-1; i < n; i+=d){ret+=s[i];}return ret;}
};

4.总结

大部分的模拟题如果要做优化,大概就是去找其中的规律。


EOF

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中回调与Timer类的使用

回调&#xff1a;回调&#xff08;callback)是一种常见的程序设计模式。在这种模式中&#xff0c;可以指出某个特定事件发生时应该采取的动作。 Timer类&#xff1a;java.swing包中的Timer类&#xff0c;可以使用它在给定的时间间隔时发出通告。如程序中有一个时钟&#xff0c…

如何在IDEA中实现类似Linux命令那样的外部传参

【背景说明】 IDEA中执行一个程序时&#xff0c;如何就在程序一开始执行给传入你给的参数呢&#xff1f; 【说明】 public static void main(String[] args) throws Exception {} 说明&#xff1a;其实java中main方法里的args这个参数&#xff0c;就是用于接收外部传参的。…

redis常见使用场景

文章目录 redis常见使用场景全局ID位统计购物车用户消息时间线timeline抽奖商品筛选分布式锁限流redis实现计数器排行榜消息队列redis 如何实现延时队列 redis生产常用的场景 redis常见使用场景 Redis 是一种高性能的内存数据库&#xff0c;广泛应用于各种场景中。以下是 Redi…

Golang容器:Channel

Channel概念 Channel管道 是Go语言中一种强大的通信机制&#xff0c;它使得在并发运行的goroutines之间可以高效地交换数据。通过Channel管道&#xff0c;goroutines能够&#xff1a; 同步执行&#xff1a;Channel管道可以用来协调并发任务的执行顺序&#xff0c;确保它们在正…

String类型的二维数组怎么写

今天做题遇到一个问题&#xff1a;就是需要写String类型的二维数组时&#xff0c;我蒙圈了。后来查了资料发现&#xff0c;String类型的二维数组其实是由若干个一维数组构成的。 1.先初始化一个二维数组&#xff1a;List<List<String>> list new ArrayList<&g…

centos7.9安装docker

安装docker yum install docker -y 安装 docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64" -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-compose mysql docker-com…

基于JAVA+SpringBoot+Vue前后端分离的医院在线挂号预约问诊平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 链接点击直达&#xff1a;下载链接 前言 哈喽兄弟…

前端Vue小兔鲜儿电商项目实战Day05

一、登录 - 整体认识和路由配置 1. 整体认识 登录页面的主要功能就是表单校验和登录退出业务 ①src/views/Login/index.vue <script setup></script><template><div><header class"login-header"><div class"container m-…

springboot 后端文件上传,多文件上传,预览接口开发实现

在Spring Boot中实现文件上传和多文件上传的功能可以通过使用Spring MVC的MultipartFile类来实现。以下是一个简单的示例代码,展示了如何实现文件上传和多文件上传的功能。 首先,创建一个用于处理文件上传请求的Controller类。在该类中,我们需要使用@PostMapping注解来接收…

Gitee的原理及应用详解(四)

本系列文章简介&#xff1a; Gitee是一款开源的代码托管平台&#xff0c;是国内最大的代码托管平台之一。它基于Git版本控制系统&#xff0c;提供了代码托管、项目管理、协作开发、代码审查等功能&#xff0c;方便团队协作和项目管理。Gitee的出现&#xff0c;在国内的开发者社…

Re0:从零开始的C++游戏开发【上】

Re0:从零开始的C游戏开发 这是蒟蒻观看B站upVoidmatrix的课程从零开始的提瓦特幸存者的个人笔记【自用】 前言&#xff1a;采用适用于小白的easyx图形库。 第一集 追着鼠标的小球 #include <graphics.h> #include <iostream> int main(void) {// 初始化initgra…

微信小程序教程DAY3

box标签 第二种方法 绿色第一种 第一种更好 效果一样 完成这个项目 先写循环

Python深度学习基于Tensorflow(13)目标检测实战

文章目录 RPN 整体代码RPN 具体实现过程数据标注读取标注数据固定图片大小调整目标框使用预训练模型获取 feature_shape定义 RPN 网络生成RPN 的 CLS 和 REG 数据集获取所有的锚点计算锚点与目标框的IOU 定义 RPN loss 和 训练过程 参考资料 这里实现的是二阶段目标检测&#x…

十分钟快速搭建检索、排序的大模型RAG系统

以上为实现效果 RAG是目前最火的大模型应用之一&#xff0c;如何能快速实现一个不错的demo呢&#xff1f; 参考 https://github.com/LongxingTan/open-retrievalshttps://colab.research.google.com/drive/1fJC-8er-a4NRkdJkwWr4On7lGt9rAO4P?uspsharing#scrollTo2Hrfp96UY…

第二届“天洑杯”全国高校数据建模大赛圆满收官

近日&#xff0c;第二届“天洑杯”全国高校数据建模大赛在江苏省无锡市第七届智能优化与调度学术会议现场圆满收官。在为期四周的线上赛中&#xff0c;共有来自全国 71 所高校及企业的 117 支队伍参与角逐&#xff0c;共10支队伍进入决赛。 本届大赛评审组由西安电子科技大学教…

鸿蒙开发接口媒体:【@ohos.multimedia.camera (相机管理)】

相机管理 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块…

Vue3实战笔记(52)—Vue 3封装持仓分析饼图

文章目录 前言一、封装持仓分析饼图总结 前言 接上文&#xff0c;封装持仓分析饼图。 一、封装持仓分析饼图 EChartsPieBorderRadiusType.vue&#xff1a; <template><div><div ref"chartContainer" style"width: 100%; height: 450px"&g…

vue中使用pinia实现状态管理——useXXXStore函数

vue中使用pinia实现状态管理 大家一定在vue中还见过 useXXXStore这样的函数&#xff0c;用来实现状态管理的。可以把它当成一个永远存在的组件&#xff0c;每个组件都可以读取和写入它。它有三个概念&#xff0c;state、getter 和 action&#xff0c;我们可以假设这些概念相当…

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关&#xff0c;低边驱动就是通过闭合地线来控制这个开关的开关。容易实现&#xff08;电路也比较简单&#xff0c;一般由MOS管加几个电阻、电容&#xff09;、适用电路简化和成本控制的情况。 高边驱动&am…

Qt 窗口

在Qt Creator 中创建项目的时候&#xff0c;我们能够选择创建QMainWindow 还是 QWidget 两种窗口。 二者有什么区别呢&#xff1f;其中 QMainWindow 是一种主窗口&#xff0c;包含菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;中心窗口和浮动窗口等多个窗口组合&…