LeetCode 6. Z 字形变换

54 阅读1分钟

LeetCode 6 Z子形变换

分析

可以先按照数字顺序写出,找规律 n = 4 时候

0     6       12
1   5 7    11 13
2 4   8 10    14
3     9       15

可以看到 第0行和第n - 1行是由一个以i为起点,以2n - 2为公差的等差数列构成 其余行由两个等差数列交替构成

  1. 以i为起点,以2n - 2为公差的等差数列构成
  2. 以2n - 2 - i 为起点,以2n - 2位公差的等差数列构成

ok

Code

function convert(s: string, n: number): string {
  let res = ""
  if(n === 1) return s;
    for(let i = 0; i < n; i ++){
        if(i === 0 || i === n - 1){
            for(let j = i; j < s.length; j += 2 * n - 2){
                res += s[j];
            }
        }else{
            for(let j = i, k = 2 * n - 2 - i; j < s.length || k < s.length; j += 2 * n - 2, k += 2 * n - 2){
                if(j < s.length) res += s[j];
                if(k < s.length) res += s[k];
            }
        }
    }

    return res;
  
};