Zigzag
date: 2015-09-24 21:09:00
Print Zigzag
思路:
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();
}
}
EOF by toto
Zigzag的更多相关文章
- [LeetCode] Zigzag Iterator 之字形迭代器
Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ...
- [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [LeetCode] ZigZag Converesion 之字型转换字符串
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- 【leetcode】ZigZag Conversion
题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows ...
- 整数压缩编码 ZigZag
在分析Avro源码时,发现Avro为了对int.long类型数据压缩,采用Protocol Buffers的ZigZag编码(Thrift也采用了ZigZag来压缩整数). 1. 补码编码 为了便于后 ...
- No.006:ZigZag Conversion
问题: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- ZigZag Conversion leetcode java
题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- 【leetcode❤python】 6. ZigZag Conversion
#-*- coding: UTF-8 -*- #ZigZag Conversion :之字型class Solution(object): def convert(self, s, numRow ...
- Binary Tree Zigzag Level Order Traversal [LeetCode]
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- LeetCode 6 ZigZag Conversion 模拟 难度:0
https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is written in ...
随机推荐
- 《oracle每天一练》Oracle冷备份与数据恢复
相关帖子 转自http://blog.csdn.net/nsj820/article/details/5611361 备份 直接拷贝oracle目录下的admin.oradata(datafile, ...
- [转] 理解 Thread.Sleep 函数
原文链接:http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时 ...
- Effective C++ -----条款28:避免返回handles指向对象内部成分
避免返回handles(包括reference.指针.迭代器)指向对象内部.遵守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handle ...
- Divide and conquer:K Best(POJ 3111)
挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa #inclu ...
- js计算在线时长
后台传来毫秒,前台转换成对应的时分秒 //在线时长 function longTime(seconds){ //总秒数 //seconds=seconds/1000; //得到小时 var hour ...
- JavaScript高级程序设计学习笔记--变量、作用域和内存问题
传递参数 function setName(obj){ obj.name="Nicholas"; obj=new object(); obj.name="Greg&quo ...
- 【python】入门学习(二)
键盘读取字符串: name = input('What is your first name?').strip()print("Hello " + name.capitalize( ...
- python if __name__ == '__main__'解析
废话不多说,正题: python中所有的模块都有一个内置属性 __name__,一个模块的 __name__ 的值取决于如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为 ...
- Mac 安装 eclipse
总是看着安卓的代码感觉手痒痒,闲来无事在 Mac 端安装了一下eclipse 提高逼格. 1.官网(http://www.eclipse.org/downloads/)下载所需的安装包,具体步骤如图: ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...