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为公差的等差数列构成
其余行由两个等差数列交替构成
- 以i为起点,以2n - 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;
};