zoukankan      html  css  js  c++  java
  • 006 ZigZag Conversion

     The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
    P   A   H   N
    A P L S I I G
    Y   I   R
    And then read line by line: "PAHNAPLSIIGYIR"
    Write the code that will take a string and make this conversion given a number of rows:
    string convert(string text, int nRows);
    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    详见:https://leetcode.com/problems/zigzag-conversion/description/

    解题思路:
    1. 每一组 V 字形的长度为 size = 2 * line - 2 (斜向上的部分没有第一行和最后一样的元素),line 是行数
    2. 对于垂直向下的一列元素来说,每一组向下的列之间间隔 size 大小,即一组元素的个数。
    3. 对于斜向上的元素来说,它们的位置位于当前组 size - i(i 为该元素所在的行数,一组有 size 个字符,倒数第 i 个,位置为 size -i)。当前组的第一个字符所在位置为 j - i (j 为与斜向上的元素同在一行的,垂直向下的列的元素在字符串中的序号,i 为它们共同的行号)。
    即:j-i就是zigzag的起始字符,然后我们是要倒数第i个,因为一个zigzag有size个字符,所以倒数第i个就是size-i,我们要赋值的字符就是(j-i)+(size-i)=j+size-2*i

    class Solution {
    public:
        string convert(string s, int numRows) {
            if(s.empty()||numRows==1)
            {
                return s;
            }
            string res="";
            int len=s.size();
            int size=numRows*2-2;
            for(int i=0;i<numRows;++i)
            {
                for(int j=i;j<len;j+=size)
                {
                    res+=s[j];
                    if(i!=0&&i!=numRows-1&&j+size-2*i<len)
                    {
                        res+=s[j+size-2*i];
                    }
                }
            }
            return res;
        }
    };
    
  • 相关阅读:
    springmvc log4j 配置
    intellij idea maven springmvc 环境搭建
    spring,property not found on type
    intellij idea maven 工程生成可执行的jar
    device eth0 does not seem to be present, delaying initialization
    macos ssh host配置及免密登陆
    centos7 搭建 docker 环境
    通过rest接口获取自增id (twitter snowflake算法)
    微信小程序开发体验
    gitbook 制作 beego 参考手册
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8681902.html
Copyright © 2011-2022 走看看