Leetcode_06 Z 字形变换

2023-11-04

题目描述

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);
 

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
示例 2:
输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I
示例 3:

输入:s = "A", numRows = 1
输出:"A"

思路

这个题是典型的字符串的变换,字符的组合规则需要明白,最终结果的字符串是由按照Z型规则组合起来的,那么最终的字符串可以由每一行的字符串拼接起来得到,那么可以做一个StringBuilder的数组来定义每一行得到的字符串,而原始输入字符串和按照Z型规则排列,需要找到两个字符串从头开始每个index下对应的规律。

public static String convert(String s, int numRows) {
        int len = s.length();
        if (numRows == 1 || numRows >= len) {
            return s;
        }

        StringBuilder[] result = new StringBuilder[numRows];
        for (int i = 0; i < numRows; i++) {
            result[i] = new StringBuilder();
        }
        int index = 0; // 字符串的起始index
        int row = 0; // 行数下标
        while (index < len) {
            while (index < len && row < numRows) {
                char ch = s.charAt(index++);
                result[row].append(ch);
                row++;
            }

            if (index == len) {
                break;
            }

            row = numRows - 2;

            while(index < len && row >= 0) {
                char ch = s.charAt(index++);
                result[row].append(ch);
                row--;
            }
            row += 2;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < numRows; i++) {
            sb.append(result[i]);
        }

        return sb.toString();

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode_06 Z 字形变换 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 基于Golang和WebSocket打造自已的反向代理

    当我们在开发的时候 有时想要把自已开发的接口暴露给其他开发者或者第三方的服务 方便我们调试和排查问题 那就需要某种机制把我们本地的服务接口暴露到互联网上 本文将要介绍如何通过Golang和WebSocket来实现这一功能 为什么我们需要开发
  • 1032 挖掘机技术哪家强python3无超时

    改进后的代码成功率在90 文章目录 1 最初代码 2 改进代码 1 最初代码 usr bin env python coding utf 8 File 1032 py Time 2020 04 08 17 02 03 Author Schi
  • nginx 之 pcre 安装

    1 下载pcre wget https nchc dl sourceforge net project pcre pcre 8 43 pcre 8 43 tar gz 2 解压 3 进入解压目录 4 执行如下命令 configure ena
  • 【pytorch】pytorch使用记录(持续更新)

    1 找不到moule xxx 当训练模型在重新加载用于评估的时候出现少了一个module前缀 这个问题通常是由于训练的时候采用了数据并行操作 而评估模型的时候却没有用到 因此 只需要在训练代码中补充 net nn DataParallel
  • 深入理解Java中的字符串驻留机制

    引言 在Java编程中 字符串是最常用的数据类型之一 而Java的字符串驻留 intern 机制则是字符串处理中一个重要且经常被忽视的话题 本文将带您深入探讨Java中字符串驻留机制的原理和影响因素 什么是字符串驻留机制 字符串驻留机制是指
  • VAF Variance Accounted For(方差贡献率)

    VAF是指方差贡献率 是一种用于衡量 评估 模型预测能力的指标 即模型的预测结果与实际结果的相关程度 VAF越高 说明模型对实际数据的解释能力越好 模型预测结果越接近实际结果 计算公式 V A F 1
  • 禅道api调用(爬虫方式)

    目录 获取所有进行中的项目信息 url postman Java代码 实体类 逻辑处理 根据项目id获取指定项目下所有未关闭的任务id url postman Java代码 总结 在Java中 我们可以使用各种库和框架来创建自己的爬虫程序
  • 百度你不知道的技巧使用

    百度搜索引擎 技巧使用 例如 python 屏蔽广告 python 能够减小搜索范围 pythonfiletype pdf 搜索文件 intailpython 进行精准匹配 pythoninurl video 匹配带视频的关键词
  • 解决 ResourceWarning: unclosed <socket.socket fd=628, family=AddressFamily 警告问题 unittest ddt data 数据驱动

    文章目录 1 问题 2 办法 1 问题 ResourceWarning unclosed
  • unity常用生命周期函数以及执行顺序详解

    执行顺序 Awake gt OnEnable gt Start gt FixedUpdate gt Update gt LateUpdate gt OnGUI gt OnDisable gt OnDestroy gt OnApplicati
  • 大数据:推荐系统

    大数据 推荐系统 下面是我看 大数据 互联网大规模数据挖掘与分布式处理 一书第九章的总结 1 效用矩阵 推荐系统处理对象是用户和项 该矩阵提供某个用户对某个项的喜好程度 通常而言 大部分元素未知 推荐系统是基于已知项对未知元素进行预测 2
  • nginx+tomcat+redis实现session共享,搭建单机集群

    环境描述 以下环境是我亲测有效的搭建环境 redis 下载地址 https download csdn net download qq 37535558 12527340 tomcat8 5 20和redis的工具jar包下载地址 http
  • 升级glibc2.27

    将安装包上传至 home目录 1 解压 tar zxvf glibc 2 27 tar gz cd glibc 2 27 mkdir glibc227 cd glibc227 2 编译安装 export LD LIBRARY PATH us
  • 英文演讲Presentation有用的语句

    文章内容仅用于自己知识学习和分享 如有侵权 还请联系并删除 1 Beginning Greeting Hello Good morning afternoon evening Hello friends everyone Good even
  • Unity基础 场景概念以及场景切换

    Unity场景的概念 在Unity中 场景可以理解为一种游戏关卡 它是一个包含了游戏中各种元素的环境 如游戏物体 光照 相机 音频等等 每个场景都可以通过Unity提供的一系列方法和变量进行操作和管理 在Unity中 场景有以下特点 可以包
  • 整型数据存储以及大小端字节序存储

    文章目录 前言 整型 int short long类型 chart类型 数据在内存中的存储 原码 反码 补码 正负数在内存中的存储形式 大小端字节序存储 前言 在了解数据的存储之前 我们需要知道数据有哪几种类型 在C语言中数据分为一下几种类
  • 使用注解实现防止表单重复提交

    定义注解 ClassName SameUrlData Description TODO 自定义的注解 用于防止表单重复提交 author feizhou Date 2018年1月10日 下午4 25 02 version 1 0 0 Tar
  • 毕业设计-基于深度学习的视频目标检测

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • kernel: NFSD: client x.x.x.x testing state ID with incorrect client ID

    问题 解决办法 修改文件 etc sysconfig nfs Optional arguments passed to rpc nfsd See rpc nfsd 8 RPCNFSDARGS N 4 nfsstat s 可以看出nfsd的版
  • Leetcode_06 Z 字形变换

    题目描述 将一个给定字符串 s 根据给定的行数 numRows 以从上往下 从左到右进行 Z 字形排列 比如输入字符串为 PAYPALISHIRING 行数为 3 时 排列如下 P A H N A P L S I I G Y I R 之后