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