Z 字形变换

题目链接

Z 字形变换

题目描述

注意点

  • s 由英文字母(小写和大写)、‘,’ 和 ‘.’ 组成
  • 1 <= numRows <= 1000

解答思路

  • 一种方法是模拟整个Z字形变换思路,使用一个二维数组存储变换后的矩阵,首先需要确定这个矩阵的行数row和列数col,可以找到规律:
    • row为字符串长度和numRows中的最小值
    • col可以由此推出:对于任意numRows,可以将Z字形左侧和中间分为一组,如下图红线所示,每组的字符数量为(numRows - 1) * 2,可以看到,最终变换的图形是由多个|/组成,计算|/的数量以及剩余字符填充的列数就可推出col

  • 找到二维矩阵的row和col后,就可以模拟Z字形变换往矩阵中填充字符,过程为:当划到最后一行时,往右上划动;当划到第一行时,往下划动,以此类推即可

代码

class Solution {public String convert(String s, int numRows) {if (numRows == 1) {return s;}StringBuilder res = new StringBuilder();int n = s.length();int row = Math.min(n, numRows);int divide = n / ((numRows - 1) * 2);int remainder = n % ((numRows - 1) * 2);int col = divide * (numRows - 1) + (remainder <= numRows ? 1 : (remainder - numRows + 1));char[][] arr = new char[row][col];// 是否是Z字形左侧boolean isLeft = true;int currRow = 0;int currCol = 0;for (int i = 0; i < n; i++) {arr[currRow][currCol] = s.charAt(i);// Z字形左侧已写完if (currRow == numRows - 1) {isLeft = false;}if (currRow == 0) {isLeft = true;}if (isLeft) {currRow++;}if (!isLeft) {currRow--;currCol++;}}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (arr[i][j] != '\u0000') {res.append(arr[i][j]);}}}return res.toString();}
}

关键点

  • 推出二维矩阵的row和col的方法
  • 模拟Z字形变换的过程

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

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

相关文章

猫头虎分享已解决Bug || SyntaxError: Unexpected token < in JSON at position 0

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

说一下JVM创建对象的流程?

一、类加载检查。 在实例化一个对象的时候&#xff0c;JVM 首先会去检查目标对象是否已经被加载并初始化了。如果没有&#xff0c;JVM 需要立刻去加载目标类&#xff0c;然后调用目标类的构造器完成初始化。然后初始化的过程&#xff0c;主要是对目标类里面的静态变量、成员变…

新手入门C语言之移位操作符和位操作符

在C语言中&#xff0c;移位操作符和位操作符是专门针对二进制的数字进行&#xff0c;因此&#xff0c;在描述移位操作符和位操作符之前&#xff0c;我们先来了解十进制&#xff0c;二进制&#xff0c;八进制&#xff0c;十六进制等的含义以及相互之间的转化。 一.进制以及相互…

为什么需要MDL锁

点击上方蓝字关注我 在数据库管理中&#xff0c;元数据&#xff08;metadata&#xff09;的保护至关重要&#xff0c;而MySQL中的"元数据锁"&#xff08;MDL锁&#xff09;就是它的守护者。 1. 什么是MDL锁MDL锁&#xff0c;全名Metadata Lock&#xff0c;是MySQL中…

WordPress使用

WordPress功能菜单 仪表盘 可以查看网站基本信息和内容。 文章 用来管理文章内容&#xff0c;分类以及标签。编辑文章以及设置分类标签&#xff0c;分类和标签可以被添加到 外观-菜单 中。 分类名称自定义&#xff1b;别名为网页url链接中的一部分&#xff0c;最好别设置为中文…

为M系Mac安装Centos

下载镜像 需要使用特殊镜像&#xff0c;官网或国内的arch 镜像源不可安装 https://share.weiyun.com/2qc0S2VV CentOS-7-aarch64-08191738.mpg https://www.aliyundrive.com/s/1DCW2E5EySR 原文链接&#xff1a;https://blog.csdn.net/acdemic964850/article/details/1290565…

docker部署grafana+zabbix监控

1. grafana介绍 Grafana 是一个开源的数据可视化工具&#xff0c;它可以帮助用户将数据源中的数据进行图形化展示和实时监控&#xff0c;以便于用户能够更加直观地理解数据。Grafana 支持多种数据源&#xff0c;包括 Graphite、Elasticsearch、InfluxDB、Prometheus 等&#x…

【鸿蒙 HarmonyOS 4.0】开发工具安装

一、准备开发环境 1.1、安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio。 DevEco Studio基于IntelliJ IDEA Community&#xff08;IDEA社区版&#xff09;构建&#xff0c;为鸿蒙应用提供了一站式开发环境&#xff0c;集成了开发、运行、调试以及发布应用的…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密码:hvev 免费的企微框架 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

数据库专题——分库分表

一. 分库分表介绍二. 分库分表实践 一. 分库分表介绍 1.1 分库分表解决了什么问题 先说分库&#xff1a; 《高性能MySQL》中提到了两种数据库扩展方式&#xff1a;垂直扩展和水平扩展。前者意味着买更多性能强悍的硬件&#xff0c;但是总会达到扩展的天花板&#xff0c;且成本…

软件测试需要学习什么?好就业吗?

目前来说的话&#xff0c;整个it 都不太好&#xff01;但是既然你问了&#xff0c;我也就告诉你吧&#xff01; 1功能测试 &#xff1a;前端和后端&#xff0c;前端就是简单的页面&#xff0c;你需要考虑的是&#xff1a;必填项&#xff0c;边界值&#xff0c;组合&#xff0c…

WebRTC最新版报错解决:city.wav:missing and no known rule to make it (二十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…