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();
            
        }
    }
    

      

  • 相关阅读:
    Centos7:mariadb替换mysql
    CentOS5 部署 戴尔OMSA
    《Zero MQ》
    可扩展的Web架构和分布式系统
    队列实现
    超级好用的正则表达式网站
    <转>undefined与null的区别
    JS事件
    sublime text 3 快捷键
    设置className的方式(不使用setAttribute)
  • 原文地址:https://www.cnblogs.com/sevenun/p/5930268.html
Copyright © 2011-2022 走看看