给出字符串helloWorld! 每一行都是独立的字符串,最后拼接起来就ok。 1、n行即n个String,考虑到字符串经常拼接修改,故使用StringBuiler能大大提高效率。 2、观察规律,发现4个一组(红色框框部分)。 3、循环红色框框部分即可 4、细节 如有意见,多多指出!
ZigZag
1、题解
从左往右依次是holelWrdlo!
从左往右依次是hoeWrlol!ld
2、思路
3、实现
StringBulier[] sb = new StringBuiler[n] //n行
由此可见,我们只需循环红色部分即可。红色部分包含两部分:左侧n个,右侧n-2个。
每一个红框部分如下: for (int i = 0; i < n; i++) { //左侧依次加入String1,String2,...String n sb[i].append(字符串中下标为i对应的字符即str.charAt(i)) } for (int i = n - 2; i > 0 ; i--) { // 从下往上所以要倒着来 // 右侧依次加入String1,String2,...String n sb[i].append(字符串中下标为i对应的字符即str.charAt(i)) }
int index = 0; //对应字符串的下标 while(index < length){ //length为字符串长度 //循环红色框框部分 }
1、如果传入hello,但是行数比字符串长度还大比如1000行,显然结果还是hello。 2、如果传入了null或空,则直接返回null或者空。 3、有这样一种情况:如图。 开始第四次循环红框部分时,此时index=13,满足index<length条件。 如果index=16时,它还在while内部循环,此时str.charAt(index)就会抛出空指针异常! 所以在while内部的for循环也要加上index<length的条件。
4、Java代码
public String convert(String text, int nRows) { if (nRows < 1) return null; if (null == text || "".equals(text)) return text ; if (text.length() <= nRows || nRows == 1) return text; char[] chars = text.toCharArray(); int len = chars.length; StringBuilder[] sb = new StringBuilder[nRows]; for (int i = 0; i < sb.length; i++) { sb[i] = new StringBuilder(); } int charIndex = 0; while (charIndex < len) { for (int i = 0; i < nRows && charIndex < len; i++) { sb[i].append(chars[charIndex++]); } for (int i = nRows - 2; i > 0 && charIndex < len; i--) { sb[i].append(chars[charIndex++]); } } StringBuilder res = new StringBuilder(); for (int i = 0; i < sb.length; i++) { res.append(sb[i]); } return res.toString(); }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算