zoukankan      html  css  js  c++  java
  • LeetCode 6. ZigZag Conversion Question

    题意:给你一个字符串和行数numRows,要求把该字符串变成一个“之”字形状后,按行数输出该字符串。

    例子:"ABCDEFGHIJKLMNO", 4。

    该字符串的“之”字形状为:

    A       G      M
    B    F  H   L  N
    C  E    I  K   O
    D       J       
    

    那么,输出为AGMBFHLNCEIKODJ (按行数输出)

    思路:数学推导公式。在字符串中,有两行是特殊的,那就是第一行和最后一行。

         第一行和最后一行,字符都是在一竖上,且字符之间相距的距离都是diff = 2*(numRows-1) (距离是指在原字符串中字符的下标之差)。

       其余的行,在每竖字符之间都会有一个字符,比如F,它与左边的字符B的距离则为2*(numRows-i-1) ,i为B的行标(1)。

    public class Solution {
        public String convert(String s, int numRows) {
            StringBuilder sb = new StringBuilder();
            
            if (numRows == 1) return s;
            
            int diff = 2*(numRows-1);
            
            for (int i = 0; i < numRows; i++) {
                int x,x2;
                if (i == 0 || i == numRows-1) {
                    x = i;
                    while (x < s.length()) {
                        sb.append(s.charAt(x));
                        x += diff;
                    }
                    
                } 
                else {
                    x = i;
                    x2 = x + 2*(numRows-i-1);
                    while (x <s.length()) {
                        sb.append(s.charAt(x));
                        x2 = x + 2*(numRows-i-1);
                        if (x2 < s.length()) {
                            sb.append(s.charAt(x2));
                        }
                        x += diff;
                    }
                }
            }
            return sb.toString();
            
        }
    }
    

      

  • 相关阅读:
    Node
    HTTP权威指南
    一些乱七八糟的思考积累
    有限状态机
    奇怪问题引用到其它文件夹项目文件方法
    dijkstra+堆优化
    高精度
    BUAA 1301 最短路
    阿里云服务器ECS(Centos8)下安装和配置python3.8
    Cheat Sheet
  • 原文地址:https://www.cnblogs.com/sevenun/p/5930268.html
Copyright © 2011-2022 走看看