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

模拟-6.N字形变换-力扣(LeetCode)

一、题目解析

1、将字符串s从上到下 ,从左往右Z字形排列

2、固定行数,按行数从左往右,从上往下得到新字符串

二、算法原理

解法1:模拟

模拟顾名思义,模拟题目的运行过程

解法2:找规律

在模拟的基础上,我们可以通过找规律优化时间复杂度和空间复杂度

根据总结的规律我们可以将其分为三个循环解决,第一个循环解决第0行,双重循环解决中间行,最后一个循环解决第numRows-1, 以及需要注意细节问题,即中间行排列过后不一定成对出现,所以在第二层循环处对于判断要用||,而且还需要判断是否越界

三、代码示例

解法2:

class Solution {
public:string convert(string s, int numRows){if(numRows == 1) return s;int d = 2*numRows-2;string ret;for(int i = 0;i<s.size();i+=d) ret += s[i];//第1行for(int i = 1;i<numRows-1;i++)//中间行{for(int j = i,k = d-i;j<s.size() || k<s.size();j+=d,k+=d){if(j<s.size()) ret += s[j];if(k<s.size()) ret += s[k];}}for(int i = numRows-1;i<s.size();i+=d) ret += s[i];//最后一行return ret;}
};

 

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!

http://www.xdnf.cn/news/17138.html

相关文章:

  • 基于springboot的学习辅导系统设计与实现
  • 【深度学习新浪潮】谷歌新推出的AlphaEarth是款什么产品?
  • spring-ai-alibaba 之 graph 槽点
  • 若没有安全可靠性保障,对于工程应用而言,AI或许就是大玩具吗?
  • 嵌入式通信协议解析(基于红外NEC通信协议)
  • 深入解析C++函数重载:从原理到实践
  • 模型学习系列之参数
  • C# LINQ(LINQ to XML)
  • OpenWrt | 如何在 ucode 脚本中打印日志
  • 基于BiLSTM+CRF实现NER
  • Remix框架:高性能React全栈开发实战
  • 如何查看SoC线程的栈起始地址及大小
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 数据结构(概念及链表)
  • NumPy库学习(三):numpy在人工智能数据处理的具体应用及方法
  • 安卓加固脱壳
  • io_getevents系统调用及示例
  • [Oracle] DUAL数据表
  • 性能测试工具ApacheBench、Jmeter
  • Linux Deepin深度操作系统应用商店加载失败,安装星火应用商店
  • Ubuntu系统VScode实现opencv(c++)视频的处理与保存
  • 基于单片机火灾报警系统/防火防盗系统设计
  • linux下jvm之jstack的使用
  • 应急响应整理
  • 百度网盘SVIP下载速度异常
  • 浅谈Python中的os.environ:环境变量交互机制
  • 基于Springboot+UniApp+Ai实现模拟面试小工具八:管理端基础功能实现
  • mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件
  • OSPF HCIP
  • CICD--自动化部署--jinkins