zoukankan      html  css  js  c++  java
  • Leetcode 6.Z字形变换

    Z字形变换

    将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

    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

    解决方案

    方法一:按行排序

    思路

    通过从左向右迭代字符串,我们可以轻松地确定字符位于 Z 字形图案中的哪一行。

    算法

    我们可以使用个列表来表示 Z 字形图案中的非空行。

    从左到右迭代 sss,将每个字符添加到合适的行。可以使用当前行和当前方向这两个变量对合适的行进行跟踪。

    只有当我们向上移动到最上面的行或向下移动到最下面的行时,当前方向才会发生改变。

     1 class Solution {
     2     public String convert(String s, int numRows) {
     3 
     4         if (numRows == 1) return s;
     5 
     6         List<StringBuilder> rows = new ArrayList<>();
     7         for (int i = 0; i < Math.min(numRows, s.length()); i++)
     8             rows.add(new StringBuilder());
     9 
    10         int curRow = 0;
    11         boolean goingDown = false;
    12 
    13         for (char c : s.toCharArray()) {
    14             rows.get(curRow).append(c);
    15             if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
    16             curRow += goingDown ? 1 : -1;
    17         }
    18 
    19         StringBuilder ret = new StringBuilder();
    20         for (StringBuilder row : rows) ret.append(row);
    21         return ret.toString();
    22     }
    23 }

     1 class Solution {
     2     public String convert(String s, int numRows) {
     3 
     4         if (numRows == 1) return s;
     5 
     6         StringBuilder ret = new StringBuilder();
     7         int n = s.length();
     8         int cycleLen = 2 * numRows - 2;
     9 
    10         for (int i = 0; i < numRows; i++) {
    11             for (int j = 0; j + i < n; j += cycleLen) {
    12                 ret.append(s.charAt(j + i));
    13                 if (i != 0 && i != numRows - 1 && j + cycleLen - i < n)
    14                     ret.append(s.charAt(j + cycleLen - i));
    15             }
    16         }
    17         return ret.toString();
    18     }
    19 }
     

  • 相关阅读:
    zabbix_agent 主动模式配置
    zabbix 监控ipmi
    超级详细全截图化VMware 安装ubantu
    docker 部署
    C# DataTable和List转换操作类
    C#类型转换工具类
    C# 注册windows 服务
    C# wsdl.exe 生成类文件
    visual studio code download url
    c# xml序列化和反序列化
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10162967.html
Copyright © 2011-2022 走看看