zoukankan      html  css  js  c++  java
  • LeetCode 6. Z字形变换(ZigZag Conversion)

    题目描述

    将字符串 "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字中间的字符。对于最后一个周期,要判断是否走到了字符串末尾。

    代码

     1 class Solution {
     2 public:
     3     string convert(string s, int numRows) {
     4         if(numRows == 1) return s;
     5         int cycle = 2 * numRows - 2;
     6         int numZ = s.length() / cycle;
     7         string res = "";
     8         for(int i = 0; i < numRows; i++){
     9             for(int j = 0; j <= numZ; j++){
    10                 if(j * cycle + i >= s.length()) continue;
    11                 if(i == 0 || i == numRows - 1)
    12                     res += s[j * cycle + i];
    13                 else{
    14                     res += s[j * cycle + i];
    15                     int idx = j * cycle + cycle - i;
    16                     if(idx < s.length())
    17                         res += s[idx];
    18                 }
    19             }
    20         }
    21         return res;
    22     }
    23 };
  • 相关阅读:
    LeetCode
    LeetCode
    136. Single Number
    485. Max Consecutive Ones
    THinkPHP的认识
    MySql的简单数据类型区别与认识
    关于数据库中字符串类型的区别与使用方法
    关于数据库的建立以及表格的建立
    关于xampp集成开发环境的建立与初步认识
    如何关闭SQL进程
  • 原文地址:https://www.cnblogs.com/wmx24/p/9547249.html
Copyright © 2011-2022 走看看