思路1:String[numRow]行字符串数组。读取原始字符串每一个字符,设置行变量 nrow和行标志位flag(向下一行为1或向上一行为-1)。将该字符连接到数组中对应的行字符串,同时nrow+=flag。

     public String convert(String s, int numRows) {
if(s==null||s.length()==0||numRows<=1){
return s;
}
String[] strRowArr=new String[numRows];
Arrays.fill(strRowArr, "");
int flag=1; //向下走为1,向上走位-1
int nrow=0; //当前字符应该在的行
for(int i=0;i<s.length();i++){
char t=s.charAt(i);
strRowArr[nrow]+=t;
nrow+=flag;
if(nrow>=numRows){
//nrow已经越下界,更新为倒数第二行,标志flag也变为-1
nrow=(numRows-1)-1;
flag=-1;
}
if(nrow<0){
//nrow已经越上界,更新为第二行,标志位flag变为1
nrow=1;
flag=1;
}
}
//行字符串数组 拼接成一个完整的字符串
String rowString="";
for(String str:strRowArr){
rowString+=str;
}
return rowString;
}

思路2:每一行必然包含间隔为 2*numRows-2的字符 , 中间行间隔还需要加上2*numRows-2-2*i

     public String convert(String s, int numRows){
if(s==null||s.length()==0||numRows<=1){
return s;
}
int tag=2*numRows-2;
String result="";
for(int i=0;i<numRows;i++){ //i行
for(int j=i;j<s.length();j+=tag){//读取每一行应该有的字符
result+=s.charAt(j); //如果是非首行和尾行,还需要添加tag间隔中间字符
if(i>0&&i<numRows-1){
int t=j+tag-2*i;
if(t<s.length()){
result+=s.charAt(t);
}
}
}
}
return result;
}

最新文章

  1. Hololens开发笔记之连接PC实现资源共享
  2. [java] 汇率换算器实现(3)
  3. LeetCode Potential Thought Pitfalls
  4. Codeforces Round #204 (Div. 2) A.Jeff and Digits
  5. Delphi出现“borland license information was found,but it is not valid for delphi”的错误,无法运行的解决方法
  6. 夺命雷公狗ThinkPHP项目之----企业网站2之数据库的快速设计
  7. ubuntu 安装 boost
  8. JavaScript == VS ===
  9. SQL Server R2 2008中的SQL Server Management Studio 阻止保存要求重新创建表的更改问题的设置方法
  10. vue源码学习-vnode的挂载和更新流程
  11. 【 全干货 】5 分钟带你看懂 Docker !
  12. 解读“Deep Neural Decision Forests” 2015 Winner of the David Marr Prize
  13. MySQL ERROR 1054(42S22)
  14. js-day02-BOM和DOM
  15. centos+git+gitolite 安装和部署
  16. UDP广播 MAC地址
  17. 安卓adb工具的安装方法
  18. Javascript高级编程学习笔记(33)—— 客户端检测(2)怪癖检测
  19. [深度学习]CNN--卷积神经网络中用1*1 卷积有什么作用
  20. codeblock设置快捷键

热门文章

  1. DotnetBrowser入门教程-(2)启动简单的Web服务
  2. C++ 关于类与对象在虚函数表上唯一性问题 浅析
  3. SSO单点登录系列1:cas客户端源码分析cas-client-java-2.1.1.jar
  4. 聚合数据Android SDK 12306火车票查询订票演示示例
  5. sakila演示数据库安装
  6. 一种把dll放在不同目录的巧妙方法
  7. \\s+ split替换
  8. easyNetq demo
  9. string去空格
  10. VMware 中安装Centos