锯齿转变(ZigZag Conversion)
来源:互联网 发布:税务数据采集软件 编辑:程序博客网 时间:2024/04/29 22:52
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"
.
这个题目看完以后我猜大部分人还是没搞明白题目到底想干啥,我当时也没搞明白,主要原因还是例子给的有点少,好,既然他例子给的少,那我们自己再举几个栗子……
假设输入字符串为“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
那么当nRow = 3时:
A E I M Q U Y BDFHJLNPRTVXZ C G K O S W
那么当nRow = 4时:
A G M S Y B FH LN RT XZ CE IK OQ UW D J P V
那么当nRow = 5时:
A I Q Y B HJ PR XZ C G K O S W DF LN TV E M U
这下就很明白了,代码的实现不是很难,只要控制好边界条件即可。我的思路也很简单,按照当前字符串的字符顺序填入二维数组中,然后再去便利二维数组……感觉时间复杂度上还是控制的不太好,以后有了更好的方法再更新吧……
public class ZigZagConversion { public String convert(String s, int numRows) { if (numRows == 1) return s; int len = s.length(); int times = len / (numRows + numRows - 2); int tailLen = len % (numRows + numRows - 2); StringBuilder stringBuilder = new StringBuilder(""); char zzArr[][] = new char[numRows][(times + 1) * (numRows - 1)]; int k = 0; boolean tag = false; boolean clo = true; boolean dig = false; for (int i = 0; i < (times + 1) * (numRows - 1);){ if (clo){ for (int j = 0; j < numRows;){ if (k < s.length()) zzArr[j][i] = s.charAt(k++); j++; if (j < numRows -1){ clo = true; dig = false; } if (j == numRows - 1){ clo = false; dig = true; } } } if (dig){ for (int j = numRows - 1; j > 0;) { j--; i++; if (j > 0 & k < s.length()) zzArr[j][i] = s.charAt(k++); if (j > 0){ clo = false; dig = true; } if (j == 0){ clo = true; dig = false; } } } if (k == s.length()) break; } for (int i = 0; i < zzArr.length; i++){ for (int j = 0; j < zzArr[i].length; j++){ if (zzArr[i][j] >= '!' && zzArr[i][j] <= '~') stringBuilder.append(zzArr[i][j]); } } return stringBuilder.toString(); }}
0 0
- 锯齿转变(ZigZag Conversion)
- ZigZag Conversion(java)
- ZigZag Conversion(python)
- LeetCode(6) ZigZag Conversion
- ZigZag Conversion (C实现)
- 6. ZigZag Conversion (Easy)
- LeetCode (6)ZigZag Conversion
- 第十七周(ZigZag Conversion)
- 6. ZigZag Conversion(Medium)
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- Zigzag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- CSS3 Columns:比table更好用的分列式布局方法
- 获取apk签名及apk签名方法
- (Leetcode)70.Climbing Stairs(easy)
- kubernetes的service的网络类型ingress的搭建
- Java——IO流
- 锯齿转变(ZigZag Conversion)
- php中的数组遍历
- CodeForces 356A Knight Tournament 【线段树】
- 你知道Hello World程序的由来吗?
- 方法的使用常见问题
- 增删改查
- poj-3624-Charm Bracelet【经典01背包】
- php中的作用域
- Java老鸟项目经验