public static String Convert(String s,int row) {
char[] c=s.toCharArray();
int len=s.length();
StringBuilder[] stringBuilders=new StringBuilder[row];
for (int i = 0; i < row; i++) {
stringBuilders[i]=new StringBuilder();
} int i=0;
while(i<len){
for (int j = 0; j < row&&i<len; j++) {
stringBuilders[j].append(c[i++]);
}
for (int j =row-2; j >=1; j--) {
stringBuilders[j].append(c[i++]);
}
}
for (int j = 1; j < stringBuilders.length; j++) {
stringBuilders[0].append(stringBuilders[j]);
}
return stringBuilders[0].toString();
}
/*思路:
1. 首先是按行输出,每行输出相同位置的下一间隔为row*2-2,行游标0<i<row;
2. 行内输出,考虑中间斜向部分,首行和末行,直接打印空格,中间部分,需要打印斜向字符及前后空格
斜向部分字符在字符串中的坐标为span+j-2*i,其中j为行内游标(列游标)
斜向字符前面空格数为row-2-i,斜向字符后空格数为i-1
3. 为什么是span+j-2*i?
初始化时(每一行的首个斜向部分),j=i,字符位置为span-i+(j-i),其中j-i==0;
也必须这样初始化,因为要打印出首列的字符,通过j=i初始化,完成j的自增1,还能控制本行下一字符的输出;
第二个斜向部分,j+=span,字符位置为span*2-i==span-i+(j+=span)-i==span+j-2*i;
....
重点是:span-i是位置,配合行内游标j,使得位置可以行内自增,但是要减去初始化的值,即j=i;
所以,有了span-i+j-i,即span+j-2*i*/
public static void printZigZag(String s,int row) {
if (s.length()==0||row<1) {
return;
}
if (row==1) {
System.out.println(s);;
} int span=row*2-2;
int zig=row-2;
//控制行打印
for (int i = 0; i < row; i++) {
//控制每行,垂直列上的输出,间隔为span
for (int j = i; j < s.length(); j+=span) {
System.out.print(s.charAt(j));
//控制中间斜向部分的输出,其中斜向输出字符在字符串中的位置为span+j-2*i
if (i!=0&&i!=row-1&&span+j-2*i<s.length()) {
for (int j2 = 0; j2 < zig-i; j2++) {
System.out.print(" ");
}
System.out.print(s.charAt(span+j-2*i));
for (int j2 = 0; j2 < i-1; j2++) {
System.out.print(" ");
}
}
else {
for (int j2 = 0; j2 < zig; j2++) {
System.out.print(" ");
}
}
}
System.out.println();
}
}

Zigzag convert的更多相关文章

  1. [LeetCode] ZigZag Converesion 之字型转换字符串

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

  2. 【leetcode】ZigZag Conversion

    题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows ...

  3. No.006:ZigZag Conversion

    问题: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  4. ZigZag Conversion leetcode java

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  5. 【leetcode❤python】 6. ZigZag Conversion

    #-*- coding: UTF-8 -*- #ZigZag Conversion :之字型class Solution(object):    def convert(self, s, numRow ...

  6. LeetCode 6 ZigZag Conversion 模拟 难度:0

    https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is written in ...

  7. leetcode6:Zigzag Conversion@Python

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

  8. leetcode 6. ZigZag Conversion

    https://leetcode.com/problems/zigzag-conversion/ 题目: 将字符串转化成zigzag模式. 例如 "abcdefghijkmlnpq" ...

  9. [LeetCode]ZigZag Conversion

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

随机推荐

  1. Bootstrap datepicker可配置网址

    http://eternicode.github.io/bootstrap-datepicker/?markup=input&format=&weekStart=&startD ...

  2. iOS 真机文件系统区分大小写,而模拟器可能不区分

    模拟器区不区分大小写要看mac os是不是区分大小写,而这个和你的文件系统有关,如下图 如果你使用了默认的格式,就区分不了大小写了! 看来以后还是应该使用第二种格式啊!

  3. intel 面试总结

    昨天面了intel的Android部门,基无意外,面试的效果不是很好,很多问题没有回答上来,看来如果要进intel这种大公司光靠SJTU光环是远远不够的,必须要有真才实学.面试的还是一位交大学长,本科 ...

  4. Linux下WebSphereV8.5.5.0 安装详细过程

    自WAS8以后安装包不再区别OS,一份介质可以安装到多个平台.只针对Installation Manager 进行了操作系统的区分 ,Websphere产品介质必须通过专门的工具Install Man ...

  5. 【QT】C++ GUI Qt4 学习笔记1

    Find对话框实现 平台 Qt5.3.2 MinGW4.8.2 注意创建时用QDialog finddialog.h #ifndef FINDDIALOG_H #define FINDDIALOG_H ...

  6. quartz+spring 实现多任务动态定时器问题

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  7. IOS-JSON & XML解析

    XML & JSON 简介 •JSON –作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 –基于JavaScript的一个子集 –易读性略差,编码手写难度大,数据量小 ...

  8. js中masonry与infinitescroll结合 形成瀑布流

    后台:(有点问题 page应该从1开始 而不是从0开始)     public function actionExperts()    {        $top=5;        $page=em ...

  9. 如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法

    最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指 ...

  10. Mysql游标

    14.6.6.1 Cursor CLOSE Syntax 14.6.6.2 Cursor DECLARE Syntax 14.6.6.3 Cursor FETCH Syntax 14.6.6.4 Cu ...