[Leetcode]6. Z 字形变换

作者:神秘网友 发布时间:2021-02-26 19:50:11

[Leetcode]6. Z 字形变换

题目描述

将一个给定字符串 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"
  • 提示:
1 = s.length = 1000
s 由英文字母(小写和大写)、',' 和 '.' 组成
1 = numRows = 1000

代码实现

class Solution {

  public String convert(String s, int numRows) {
    if (numRows  2) {
      return s;
    }
    StringBuilder[] rows = new StringBuilder[numRows + 1];
    for (int i = 0; i  rows.length; i++) {
      rows[i] = new StringBuilder();
    }
    //行号
    int rowIndex = 1;
    //标识是行号增加还是减小 行号从1增加到
    int flag = -1;
    for (char c : s.toCharArray()) {
      rows[rowIndex].append(c);
      if (rowIndex == 1 || rowIndex == numRows) {
        flag = -flag;
      }
      rowIndex += flag;
    }
    return String.join("", rows);
  }

  public static void main(String[] args) {
    System.out.println(new Solution().convert("PAYPALISHIRING", 3));
    System.out.println(new Solution().convert("AB", 1));
  }
}

以下边的为例,遍历顺序为从第一行到第三行,再从第三行到第一行,依次往复。

P   A   H   N
A P L S I I G
Y   I   R

[Leetcode]6. Z 字形变换 相关文章

  1. 算法:一道题学会位操作和子集运算(LeetCode1178)

    算法:一道题学会位操作和子集运算 目录 算法:一道题学会位操作和子集运算 题目 朴素解法 哈希+子集解法 参考 题目 1178. 猜字谜 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 w

  2. leetcode刷题笔记-297. 二叉树的序列化与反序列化(java实现)

    题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限

  3. LeetCode 30. 串联所有单词的子串

    题目: 给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。 示例 1: 输入: s = "barfoothe

  4. 疑问Leetcode/数组/两数之和

    题目 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 你可以按任意顺序返回答案。 示例 1: 输入:nums =

  5. 【栈和队列】leetcode20——有效的括号

    编号20:有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1:输入: "()"输出: true

  6. 力扣 哈希算法

    目录 Leetcode #1178 猜字谜 方法:状态压缩 + 子集 + 哈希位运算 Leetcode #1178 猜字谜 题名:猜字谜 描述: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。 字谜的迷面puzzle 按字符串形式给出,如果一个单词word符合下面两个条件,

  7. [LeetCode 42.] 接雨水

    LeetCode 42. 接雨水 题目描述 给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,

  8. [LeetCode] 1041. Robot Bounded In Circle 困于圆圈路径中的机器人

    On an infinite plane, a robot initially stands at (0, 0) and faces north. The robot can receive one of three instructions: "G" : go straight 1 unit; "L" : turn 90 degrees to the left; "R" : turn 90 degrees to the right. The robot performs

  9. LeetCode——38. 外观数列

    题目介绍 题干:给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1)

  10. 删除链表的倒数第N个结点(leetcode19)

    给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 解析: 对链表操作时,一种常用的技巧:添加一个哑节点,使它的next指向链表的头结点。 这样

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词