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. Union-Find Algorithm

    Union-Find Algrithm is used to check whether two components are connected or not. Examples: By using ...

  2. METEOR 及ANGULARJS

    最近学习:METEOR 及ANGULARJS,收藏相关资源: 1.METEOR 中文书:http://zh.discovermeteor.com/ 2.METEOR 及ANGULARJS 联合开发:h ...

  3. POJ 1062 ( dijkstra )

    http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...

  4. spring boot redis缓存JedisPool使用

    spring boot redis缓存JedisPool使用 添加依赖pom.xml中添加如下依赖 <!-- Spring Boot Redis --> <dependency> ...

  5. ios NSString 转 float的注意

    今天有一个字符串 “33.3”,用想用[valueString floatValue];得到33.3000这个值,结果得到了33.2999这个值,取前3位一个是33.3,一个是33.2,产生了错误,应 ...

  6. UVALive 6577 Binary Tree 二叉树的LRU串

    今天继续攒人品...真开心啊O(∩_∩)O~~各种身体不舒服~~ https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf 题意是这样的,现在有一 ...

  7. vector在C++中的基本用法

    在写BlackJackGame的时候,考虑到要用到容器,所以就对容器的相关知识强化了一下: 因为我想的是有card类,最后要实现发牌,洗牌等等一系列的操作的时候,使用指向card类的对象的指针,将ca ...

  8. 【数据结构】红黑树 C语言代码

    连看带写花了三天,中途被指针引用搞得晕晕乎乎的. 插入和删除的调整过程没有看原理,只看了方法,直接照着写的. 看了两份资料,一份是算法导论第12-13章, 另一份是网上的资料http://blog.c ...

  9. IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序

    /*******************************快速排序 start**********************************///随即取 当前取第一个,首先找到第一个的位置 ...

  10. 240个jquery插件(转)

    http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/File upload Ajax File U ...