leetcode 6. N 字形变换(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

leetcode 6. N 字形变换(medium)(优质解法)_第1张图片leetcode 6. N 字形变换(medium)(优质解法)_第2张图片

代码:

class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1) {
            return s;
        }
        int length=s.length();
        StringBuilder ret=new StringBuilder();

        //获取排列后 0 行(首行)的字符
        int index=0;
        int d=2*numRows-2;
        while(index

题解:

        本题没有什么技巧,按照题目要求模拟题目描述的过程即可,最好通过画图找到其中的逻辑关系,以示例2为例,画出如下的图:

leetcode 6. N 字形变换(medium)(优质解法)_第3张图片

        可以来找以下其中含有的规则,我们要获取的正确答案就是从左到右逐行读取,首先要读取的是第 0 行(首行),读取到 P I N ,在字符串中的下标对应为 0 ,6 ,12,下标之间相差 6 ,P 到 L 有 6 个字符,所以递增的增量 d = 2*numRows - 2 ,2*4-2 = 6 ,所以要填充第一行的字符时,可以直接找到以 0 开始,增量为 d = 2*numRows - 2 的合法下标对应的字符

        对于 1 ~ numRows - 2 行的字符,可以每两个字符为一组,如字符 A ,L 为一组,A 的下标为 1 (行的下标与第一个字符的下标相同),L 的下标为 5 ,可以发现 L 下标为 d - A下标,所以根据行数可以得到 A, L字符的下标,S 的下标为 7 = A 的下标 + d ,I 的下标 = L 的下标 + d ,通过 这两个下标分别加上 d ,得到下一组字符的下标,获取所有符合条件的下标对应的字符即可

        对于 numRows -1 行(尾行),第一个字符 P 的下标为 3 = 当前的行的下标,下一个字符 I 的下标为 9 ,可以看出与首行相同,字符的下标按照增量 d = 2*numRows - 2 递增,根据该规则获取符合条件的下标对应的字符即可

        通过上述分析,已经知道了每一行字符下标的规则,只需要按照该规则去一行一行的获取字符拼接到字符串中即可

        要注意该题有特殊情况,当 numRows = 1  时数据要放到一行上,进行排序后和原数组相同,直接返回原数组即可

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)