6.ZigZag Conversion
来源:互联网 发布:阿里云助手 编辑:程序博客网 时间:2024/06/05 05:11
题目
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H NA P L S I I GY I RAnd then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.解题思路
解法有很多,这里采用的方法是这样的:首先算出变换之后每一行的起始地址,然后再一组一组地变换,每组元素的个数为2*numRows-2。时空复杂度均为O(n) 。
代码
public class Solution {public String convert(String s,int numRows){if(numRows<=1 || s.length()==0)return s;char[] ss=new char[s.length()];int[] startIndex=new int[numRows];int len=2*numRows-2;intn=s.length()/len;intm=s.length()%len;startIndex[0]=0;//the start index of each row after convertstartIndex[1]=startIndex[0]+n+(m>=1?1:0);for(int i=2;i<numRows;++i){startIndex[i]=startIndex[i-1]+2*n;if(m>=i)++startIndex[i];if(m>=2*numRows-i)++startIndex[i];}for(int i=0;i*len<s.length();++i)//fill in the answer string group by group(2*numRows-2){ss[startIndex[0]++]=s.charAt(i*len);for(int j=1;j<numRows-1;++j){if(i*len+j<s.length())ss[startIndex[j]++]=s.charAt(i*len+j);if(i*len+2*numRows-2-j<s.length())ss[startIndex[j]++]=s.charAt(i*len+2*numRows-2-j);}if(i*len+numRows-1<s.length())ss[startIndex[numRows-1]++]=s.charAt(i*len+numRows-1);}return String.valueOf(ss); }}
运行结果
0 0
- LeetCode 6. ZigZag Conversion
- LeetCode --- 6. ZigZag Conversion
- LeetCode 6.ZigZag Conversion
- [Leetcode] 6. ZigZag Conversion
- 6.ZigZag Conversion
- 6. ZigZag Conversion
- 6. ZigZag Conversion
- 【leetcode】6. ZigZag Conversion
- 6.ZigZag Conversion
- 6. ZigZag Conversion
- 6.ZigZag Conversion
- [LeetCode] 6.ZigZag Conversion
- LeetCode - 6. ZigZag Conversion
- 6. ZigZag Conversion
- 6. ZigZag Conversion
- 6.ZigZag Conversion(93.10%)
- 6. ZigZag Conversion
- [leetcode] 6. ZigZag Conversion
- ThinkPHP实战之登录
- poj 2524 Ubiquitous Religions
- 项目19.1 字符及其编码
- 下雨了
- 高清视频软件bandicam的破解方法
- 6.ZigZag Conversion
- XML读写
- 2016蘑菇街笔试——看清问题的本质
- Missing Number
- 转 静态方法,非静态方法
- 随机森林(random forest)可以解决样本分布不均匀维度大且特征缺失的问题
- c++11 Thread库初探
- Android Layout 优化
- SQL语句介绍(4)