题目:

思路:

以图为例:s={'A','B','C','D','E','F','G','H'.....}

1.先不考虑中间元素F、G、H、N...,每一行前后元素在数组中对应下标相差size=2*numRows-2(其中numRows是行数)

例如:第1行起始元素s[0]=A,在不大于数组长度情况下,size=2*5-2=8,该行往后依次是s[0+8]=s[8],s[0+8+8]=s[16].....

2.考虑加入中间元素,j表示当前元素所在数组的下标,i为该元素所在行(从0开始),则除第一行和最后一行外,每行前后元素间加的元素对应数 组s中下标为:j-i+(size-i)。j-i表示起始位置,size-i可理解为该行前后元素相差size,而i可看成这个size长度的倒数第i个位置

例如:第2行(即i=1)中:

若当前元素下标j=1,即s[1]=B,下一个元素为s[1+8]=s[9]=J,中间要加的元素s[1-1+8-1]=s[7]=H;

public class Solution {
public String convert(String s, int numRows) {
if(s==null||s.length()==0||numRows<=0){
return "";
}
if(numRows==1){
return s;
}
int size=2*numRows-2;
StringBuffer sb=new StringBuffer();
for(int i=0;i<numRows;i++){
for(int j=i;j<s.length();j+=size){
sb.append(s.charAt(j));
if(i!=0 && i!=numRows-1 && j-i+size-i<s.length()){//不是第一行和最后一行,考虑加入中间的元素
sb.append(s.charAt(j-i+size-i));
}
}
}
return sb.toString();
}
}

最新文章

  1. Android中事件传递机制的总结
  2. php无限遍历目录-修正版
  3. Apache Commons 常用工具类整理
  4. Notes of Principles of Parallel Programming: Peril-L Notation - TODO
  5. MFC多线程内存泄漏问题&amp;amp;解决方法
  6. ASP.NET MVC中使用Unity进行依赖注入的三种方式
  7. ubuntu10.4的更新源因过期无法更新的解决方法
  8. React Native 之 数据持久化
  9. JavaBean toString方式
  10. docker自定制镜像
  11. Centos7 初始化硬盘分区、挂载
  12. 如何使用 Docker 来限制 CPU、内存和 IO等资源?
  13. vue-property-decorator 提供 OO 的风格 Vue Component 方便类型声明
  14. JavaSE基础知识(4)—数组的应用
  15. shell脚本学习- 传递参数
  16. BZOJ.4894.天赋(Matrix Tree定理 辗转相除)
  17. hdu 5774 Where Amazing Happens 水题
  18. TestNG 入门指导——理解testng.xml执行/不执行某个包,某个类,某个方法
  19. 杭电 KazaQ&#39;s Socks
  20. 关于Oracle11g R2的学习笔记

热门文章

  1. [rootfs]Yaffs2
  2. [tty与uart]stty命令使用
  3. NeHe OpenGL教程 第一课:OpenGL窗口
  4. Makefile Shell 脚本;sed命令
  5. OSTimeDelay(1)
  6. Eclipse UML插件Green UML、AmaterasUML
  7. How to push your code in git
  8. 如何让python程序运行得更快
  9. 设置emacs插件flycheck使用jslint eslint
  10. Java中的GC操作及相关概念