zoukankan      html  css  js  c++  java
  • 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".

    思路:

    本题的一个思路就是一行一行的判断,对于有多少行,计算出gap=2*n-1;每一行i=i+gap;直接可以输出。

    但是要注意的一点就是在另外一边的一个数字的计算,当然首先需要判断不能超过n。

    还有一点就是第一行和最后一行不需要判断。

    代码:

    class Solution {
    public:
        string convert(string s, int numRows) {
            int len=s.length();
            if(numRows==1||len<=numRows){//还没有numRows大,直接从上往下读
                return s;
            }
            string result;
            int gap=2*numRows-2;
            for(int i=0;i<numRows;i++){
                for(int j=i;j<len;j=j+gap){
                    result.push_back(s[j]);
                    if(i>0&&i<numRows-1&&(j+gap-2*i)<len){
                        result.push_back(s[j+gap-2*i]);
                    }
                    //除去第一行和最后一行,第二列之字形的数字
                }
            }
            
            return result;
        }
    };


  • 相关阅读:
    MapReduce&Yarn
    Linux网络配置问题
    Linux命令总结
    Hadoop优化&新特性
    Zookeeper
    idea中修改注释颜色
    Linuxbash未找到命令问题
    Hadoop3.0入门
    HDFS
    SpringBoot
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519867.html
Copyright © 2011-2022 走看看