• Leetcode6>Zigzag Conversion(将给定字符串按照Z字排列,输出结果)


    题目:给定一个字符串s,一个整数numRows, 将字符串s按照竖Z的方式排列,然后输出结果;

    举例:String s = "PAYPALISHIRING";

    排列后为:

    P   A   H   N
    A P L S I I G
    Y   I   R
    String convert(String s, int 3) 结果为"PAHNAPLSIIGYIR"

    解题思路:

    1.  由于每一行到底有多少个字母是不确定的,因此每行使用ArrayList来保存字母;如5,6,7行代码所示;

    2.  遍历字符串:分为三个部分:第一部分(第13行代码)循环,即从上往下走;第二部分条件判断(第18行代码),判断从上往下走是否已经到达最下层,若到达,下一步应该往上走,因此ArrayList的标号应该减2;第三部分循环(第21行代码),是从下往上走;

    3.  遍历结束时,list[0]中保存的是第一行的字符串,list[1] 中保存的是第二行字符串,以此类推......

    代码如下:

     1 public class Solution {
     2       public String convert(String s, int numRows) {
     3         if(s == null || s.length() < 1 || numRows <= 1)
     4             return s;
     5         List<List> list = new ArrayList<List>();
     6         for(int i = 0; i < numRows; i++){
     7             list.add(new ArrayList<Character>());
     8         }
     9         int index = 0; // 判断是第几个ArrayList,即是第几行
    10         int i = 0;
    11         int len = s.length();
    12         while(i < len) {
    13             while(index < numRows && i < len){
    14                 list.get(index).add(s.charAt(i));
    15                 index ++;
    16                 i++;
    17             }
    18             if(index == numRows){
    19                 index -= 2;
    20             }
    21             while(index > 0 && i < len){
    22                 list.get(index).add(s.charAt(i));
    23                 i++;
    24                 index --;
    25             }
    26 
    27         }
    28         StringBuffer sb = new StringBuffer();
    29         for(int j =0; j < list.size(); j++){
    30             for(int k = 0; k < list.get(j).size(); k++){
    31                 sb.append(list.get(j).get(k));
    32             }
    33         }
    34         return sb.toString();
    35     }
    36 }
  • 相关阅读:
    celery的使用
    DOM操作
    js动画
    列表案例
    背景案例
    背景属性连写
    背景属性
    链接导航案例
    链接伪类
    优先权之权重会叠加
  • 原文地址:https://www.cnblogs.com/leavescy/p/5878631.html
Copyright © 2020-2023  润新知