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