ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode-6 ZigZag Conversion

2019-04-11 10:53:17  阅读:301  来源: 互联网

标签:Conversion tmpIdex int res ZigZag numRows tmpIdex2 leetcode row


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 s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

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

 

根据题意就是讲原先的字符串 以z型输出,再重新拼接成一个结果字符串在输出最终结果。

    public String convert(String s, int numRows) {
        if (s == null || s.isEmpty() || numRows <= 0) {
            return "";
        }
        if(s.length() <= numRows || numRows==1) {
            return s;
        }
        String res="";
        //以s = "PAYPALISHIRING", numRows = 3为例第一行所在原先的字符串中为0,0+(numRows-1)*2,0+(numRows-1)*2+(numRows-1)*2。。。
        //即(n>1时)第n个为(numRows-1)*n,n=1时为0
        int row= 0;
        while(row<numRows) {
            
            if (row == 0 || row == numRows-1) {
                int tmpIdex=row;
                res += s.charAt(tmpIdex);
                while ((tmpIdex = tmpIdex+(2  * (numRows - 1))) < s.length()) {
                    res += s.charAt(tmpIdex);
                }
            } else {
                int tmpIdex = row;
                int tmpIdex2 = row;
                if (tmpIdex < s.length()) {
                    res += s.charAt(tmpIdex);
                }
                if ((tmpIdex2 =( tmpIdex2 + 2 * (numRows - row - 1))) < s.length()) {
                    res += s.charAt(tmpIdex2);
                }
                while ((tmpIdex = tmpIdex+(2  * (numRows - 1))) < s.length()) {
                    
                    res += s.charAt(tmpIdex);
                    if ((tmpIdex2 = (2  * (numRows - 1) + tmpIdex2) )< s.length()) {
                        res += s.charAt(tmpIdex2);
                    }
                }

            }
            row++;
        }
        
        return res;
    }

标签:Conversion,tmpIdex,int,res,ZigZag,numRows,tmpIdex2,leetcode,row
来源: https://blog.csdn.net/qq_38340127/article/details/89202212

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有