zoukankan      html  css  js  c++  java
  • LeetCode(6) - ZigZag Conversion

    这个题的要求是给你一个字符串,和一个行数,例如(s = "mysisteristhemostlovelygirl" , row = 4),每一行一个字符串,但是s却得按照zigzag的方式重排序到这4行的字符串里,什么意思呢? 看例子大概就懂了:

          m    e     e      o      i

          y  t  r  h  m  l  v  g  r

          s  s  i  t  o   t  e  y  l

          i      s     s      l

      第一列开始往下走,走到第四行就往上走(第二列),走回第一行就重新往下走,如此类推,最后的输出就是每一行的叠加,也就是:

          "meeoiytrhmlvgrssitoteylissl"

      思路其实很简单,就是用一个index来表示走到哪一行,用一个flag来表示往下还是往上走,当index>4和index < 0的时候,改变flag就可以了。代码如下:

      

    public class Solution {
        public String convert(String s, int numRows) {
            if (numRows == 1) return s;
            String[] stringArray = new String[numRows];
            //初始化字符串。
            for (int i = 0; i < numRows; i++) {
                stringArray[i] = "";
            }
            //index指向哪一行需要添加字母。
            int index = 0;
            //flag==1代表往下走(初始),flag==0代表往下走。
            int flag = 1;
            for (int i = 0; i < s.length(); i++) {
                if (flag == 1) {
                    stringArray[index++] += s.charAt(i);
                    //当index越界时
                    if (index == numRows) {
                        //-2是因为边界在index-1的时候已经写过一遍了
                        index = index - 2;
                        flag = 0;
                    }
                }
                else {
                    stringArray[index--] += s.charAt(i);
                    //与上面同理
                    if (index < 0) {
                        index = index + 2;
                        flag = 1;
                    }
                }
            }
            StringBuilder sb = new StringBuilder(stringArray[0]);
            //把每一行加起来,选择用StringBuilder而不用String是因为StringBuilder要快一些
            //为什么?读者可以查阅相关资料就能够了解string往后面添加字符串是一个什么样的机制。
            for (int i = 1; i < numRows; i++) {
                sb.append(stringArray[i]);
            }
            return sb.toString();
            
        }
    }
  • 相关阅读:
    Dynamic Language Runtime 微软打出的王牌
    微软发布IronRuby
    点亮Web的灯silverlight
    Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR
    奚江华的几篇Silverlight文章
    Microsoft 的 OpenSource Licence
    CPython 和IronPython的基准测试
    Mobile上的Silverlight
    Switcher Vista Areo 工具
    ASP.NET AJAX 控件开发基础
  • 原文地址:https://www.cnblogs.com/kepuCS/p/5224697.html
Copyright © 2011-2022 走看看