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):

 class Solution6 {
public String convert(String s, int nRows) {
String str="";
if(0==nRows||1==nRows||s.length()<=nRows)
return s;
if(2==nRows){
for(int i=0;i<s.length();i+=2)
str+=s.charAt(i);
for(int i=1;i<s.length();i+=2)
str+=s.charAt(i);
return str;
}
int i=0,k=0;
boolean bool=false;
Integer []mark=new Integer[s.length()];
while(k<s.length()){
mark[k++]=i;
if(i==nRows-1){
bool=true;
}
else if(i==0){
bool=false;
}
if(!bool)
i++;
else if(bool)
i--;
}
k=0;i=0;
while(i<nRows){
while(k<s.length()){
if(i==mark[k]){
mark[k]=-1;
str+=s.charAt(k);
}
k++;
}
k=0;
i++;
}
return str;
}
}

2013-10-04

leetcode:ZigZag Conversion 曲线转换的更多相关文章

  1. 6.[leetcode] ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  2. LeetCode ZigZag Conversion(将字符串排成z字型)

    class Solution { public: string convert(string s, int nRows) { string a=""; int len=s.leng ...

  3. LeetCode: ZigZag Conversion 解题报告

    ZigZag ConversionThe string "PAYPALISHIRING" is written in a zigzag pattern on a given num ...

  4. LeetCode——ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  5. [leetcode]ZigZag Conversion @ Python

    原题地址:https://oj.leetcode.com/problems/zigzag-conversion/ 题意: The string "PAYPALISHIRING" i ...

  6. [LeetCode]ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  7. [LeetCode] ZigZag Conversion [9]

    称号 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...

  8. C++ leetcode::ZigZag Conversion

    mmp,写完没保存,又得重新写.晚上写了简历,感觉身体被掏空,大学两年半所经历的事,一张A4纸都写不满,真是一事无成呢.这操蛋的生活到底想对我这个小猫咪做什么. 今后要做一个早起的好宝宝~晚起就诅咒自 ...

  9. Leetcode:ZigZag Conversion分析和实现

    问题的大意就是将字符串中的字符按锯齿状(倒N形)垂直由上向下放置,最后水平从左向右读取.比如 ABCDEFGHIJKLMN,4表示 A          G      M B      F  H    ...

随机推荐

  1. Model的验证

    ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public v ...

  2. Docker基础技术:Linux Namespace(上)

    时下最热的技术莫过于Docker了,很多人都觉得Docker是个新技术,其实不然,Docker除了其编程语言用go比较新外,其实它还真不是个新东西,也就是个新瓶装旧酒的东西,所谓的The New “O ...

  3. Linux系统时间与RTC时间【转】

    http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3637782 Linux的RTC驱动相对还是比较简单的,可以将它作为一个普通的字符 ...

  4. 《c程序设计语言》读书笔记--统计字符数

    #include <stdio.h> #define MAXLINE 1000 int getline(char line[],int maxline); void copy(char t ...

  5. 安装cloudera

    1. 查看selinux状态 $ /usr/sbin/getenforce Enforcing $ /usr/sbin/sestatus SELinux status: enabled SELinux ...

  6. JS通用方法总结(一)

    /** * id数组转换为json字符串 */ function arrayTojson(arr) { var jsonIds = "["; for ( var i = 0; i ...

  7. 4630 no pain no game 树状数组

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你N个数,然后给你M个询问,每个询问包含一个l 一个r,问你lr 这个区间中任意两个数最 ...

  8. zoo.cfg配置

    zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳时间 Zo ...

  9. 编译器错误消息: CS0016: 未能写入输出文件

    “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入输出文件“c ...

  10. 新版Windows Azure CDN管理门户正式上线

    经过产品团队的不懈努力,新版Windows Azure CDN管理门户在经过了有限开放预览之后,已经正式上线并开放给所有用户. 新版Windows Azure CDN管理门户经过全新的设计,除了在使用 ...