第三十一天:力扣第6题,Z字形变换
地址:leetcode-cn.com/problems/zi…
思路:首先要看出来的是变换的周期是n = 2 * (numRows - 1),这个不难看出,然后每一行的规律是(j % n === i||j % n === n - i)j是序号,这样思路就清晰了。
var convert = function(s, numRows) {
if(numRows === 1)
{
return s;
}
let res = '';
const n = (numRows - 1) * 2;
for(let i = 0; i < numRows; i++)
{
for(let j = 0; j < s.length; j++)
{
if(j % n === i||j % n === n - i)
{
res += s[j];
}
}
}
return res;
};
不过好像时间复杂度有点高
执行用时:192 ms, 在所有 JavaScript 提交中击败了11.69%的用户
内存消耗:41.6 MB, 在所有 JavaScript 提交中击败了55.91%的用户
var convert = function(s, numRows) {
if(numRows == 1)
return s;
const len = Math.min(s.length, numRows);
const rows = [];
for(let i = 0; i< len; i++) rows[i] = "";
let loc = 0;
let down = false;
for(const c of s) {
rows[loc] += c;
if(loc == 0 || loc == numRows - 1)
down = !down;
loc += down ? 1 : -1;
}
let ans = "";
for(const row of rows) {
ans += row;
}
return ans;
};
这是找的其他大佬的代码,这个比较灵性,它先判断是否要向下移,再判断是否右移,获取对的值,时间复杂度确实要少点。