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 ...
随机推荐
- 【GoLang】深入理解slice len cap什么算法? 参数传递有啥蹊跷?
先上结论 .内置append函数在现有数组的长度 < 时 cap 增长是翻倍的,再往上的增长率则是 1.25,至于为何后面会说. .Go语言中channel,slice,map这三种类型的实现机 ...
- 一个静态的HTML页面用jquery ajax登录到sharepoint页面
$.ajax({ type: "get", url: "http://", d ...
- poj 1035
http://poj.org/problem?id=1035 poj的一道字符串的水题,不难,但就是细节问题我也wa了几次 题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出 ...
- strcpy vs memcpy
[本文连接] http://www.cnblogs.com/hellogiser/p/strcpy_vs_memcpy.html [分析] strcpy和memcpy都是标准C库函数,它们有下面的特点 ...
- CentOS更新yum源
CentOS更新yum源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载 ...
- 如何使用shell脚本快速排序和去重文件数据
前面写过一篇通过shell脚本去重10G数据的文章,见<用几条shell命令快速去重10G数据>.然而今天又碰到另外一个业务,业务复杂度比上次的单纯去重要复杂很多.找了很久没有找到相应的办 ...
- Storm集群的安装配置
Storm集群的安装分为以下几步: 1.首先保证Zookeeper集群服务的正常运行以及必要组件的正确安装 2.释放压缩包 3.修改storm.yaml添加集群配置信息 4.使用storm脚本启动相应 ...
- 手动设置Windows7锁屏界面背景
windows7系统安装之后锁屏.关机界面.开机欢迎界面都是系统默认的背景,其实这些背景就像桌面壁纸一样是可以更改的,如果没有修改过的话,按下面步骤就可以修改了. 首先选择一张喜欢的背景图片,分辨率不 ...
- ACM/ICPC 之 递归(POJ2663-完全覆盖+POJ1057(百练2775)-旧式文件结构图)
POJ2663-完全覆盖 题解见首注释 //简单递推-三个米诺牌(3*2)为一个单位打草稿得出规律 //题意-3*n块方格能被1*2的米诺牌以多少种情况完全覆盖 //Memory 132K Time: ...
- codeforces 507B. Painting Pebbles 解题报告
题目链接:http://codeforces.com/problemset/problem/509/B 题目意思:有 n 个piles,第 i 个 piles有 ai 个pebbles,用 k 种颜色 ...