将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N A P L S I I G Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4 输出: "PINALSIGYAHRPI" 解释: P I N A L S I G Y A H R P I
解答:
package LeetCode; /** * @Author: dainan * @Date: 2018/7/18 20:18 * @Description: */ public class ZTranslate { public static String convert(String s, int numRows) { if(s == null || numRows == 1 || s.length() <= numRows){ return s; } /**字母间的差距为0 ,2, 4, 6,8,**/ int gap = 2 * (numRows - 1); int preDiff = gap; int nextDiff = 0; int position = 0; String result = ""; for (int i = 0; i < numRows; i++) { position = i; result += s.charAt(position); while (position < s.length()) { position += preDiff; if (preDiff != 0 && position< s.length()) { result += s.charAt(position); } position += nextDiff; if (nextDiff != 0 && position < s.length()) { result += s.charAt(position); } } preDiff -= 2; nextDiff +=2; System.out.println(result); } return result; } public static void main(String[] args) { String pp = "AS"; System.out.println(convert(pp,3)); } }