• leetcode:ZigZag Conversion 曲线转换


    Question:

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);

    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    字符串"PAYPALISHIRING"就像以下“Z”形排列

    P   A   H   N
    A P L S I I G
    Y   I   R  所要得到的字符串按横行的顺序依次排列,这个字符串要求得到"PAHNAPLSIIGYIR"

    给定string convert(string text, int nRows)这个函数,你需要写代码完成这个转换,nRows可以为任意正整数。

    设计思想:1、对Rows的情况进行讨论,当Rows=1或者字符串text的长度<nRows,那么可以确定字符串还是顺序输出;

                  2、如果nRows=2,那么首先要获得text字符串偶数位置上的字母,然后获得奇数位置上的字母;

                  3、如果nRows>2且字符串长度>nRows,设计一个mark数组用来标记在字符串会在第几行,比如mark[k]=i,意思是第K个字母会在第i行。通过设置一boolean变量bool,来控制字符串移动方向,通过设置i来控制换行。

                  4、最后根据mark标记数组中的内容,分别添加第0行、1行一直到nRows行的字母到str中,并返回。

    代码实现(java)

     1 class Solution6 {
     2     public String convert(String s, int nRows) {
     3             String str="";
     4             if(0==nRows||1==nRows||s.length()<=nRows)
     5                 return s;
     6             if(2==nRows){
     7                 for(int i=0;i<s.length();i+=2)
     8                     str+=s.charAt(i);
     9                 for(int i=1;i<s.length();i+=2)
    10                     str+=s.charAt(i);
    11                 return str;
    12             }
    13             int i=0,k=0;
    14             boolean bool=false;
    15             Integer []mark=new Integer[s.length()];
    16             while(k<s.length()){
    17                 mark[k++]=i;
    18                 if(i==nRows-1){
    19                     bool=true;
    20                     }
    21                 else if(i==0){
    22                     bool=false;
    23                 }
    24                 if(!bool)
    25                     i++;
    26                 else if(bool)
    27                      i--;
    28             }
    29             k=0;i=0;
    30             while(i<nRows){
    31                 while(k<s.length()){
    32                     if(i==mark[k]){
    33                         mark[k]=-1;
    34                         str+=s.charAt(k);
    35                     }
    36                     k++;
    37                  }
    38                 k=0;
    39                 i++;
    40             }
    41             return str;
    42     }
    43 }
    View Code

    2013-10-04

  • 相关阅读:
    线程池中shutdown()和shutdownNow()方法的区别
    java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms
    ConnectTimeout和ReadTimeout所代表的意义
    hive 查询注意问题
    java面试题之int和Integer的区别
    MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
    MySQL数据库使用mysqldump导出数据详解
    C++宏定义详解
    OTL调用存储过程/函数及注意事项
    linux自定义开机启动服务和chkconfig使用方法
  • 原文地址:https://www.cnblogs.com/zhaolizhen/p/ZigZag.html
Copyright © 2020-2023  润新知