6.LeetCode 字符串z字形排列

这道题的难点就是对周期的把握

我们只要找到周期的对应规律就行了

盗个图

这个图 要注意一点  是个五行图 不是四行  

 一个周期是八个点

所以周期和行的比例就是  

   int cycleLen = 2 * numRows -2;

除去第一行和最后一行外  

别的行每个周期都是两行  也就是两个点

第一个点是   行号  第二个点就是周期 减去行号所以

 ret.append(s.charAt(j + i));
                                        //字符串长度
if (i != 0 && i != numRows - 1 && j + cycleLen - i < n) //除去第 0 ⾏和最后⼀ ret.append(s.charAt(j + cycleLen - i));

然后组合一下

  public static String convert(String s, int numRows) {
    
        StringBuilder ret = new StringBuilder();
        int n = s.length();
        int cycleLen = 2 * numRows -2;
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j +i< n; j+=cycleLen) {
                ret.append(s.charAt(j + i));
                if (i != 0 && i != numRows - 1 && j + cycleLen - i < n) 
                    ret.append(s.charAt(j + cycleLen - i));
            }

        }   return ret.toString();

    }

 

posted @ 2021-09-23 10:48  OTeam  阅读(108)  评论(0)    收藏  举报