--算法恩仇录--实战篇--力扣(LeetCode)--006-Z字形变换--
这题。。。没啥好分析的吧。。。模拟一下就行。
关键要分析好模拟需要从哪儿开始转折。
我使用的模拟是遍历一遍,将每一层分成多个字符串数组,最后进行拼接。
吐槽一下:JavaScript的二维数组真的是有点懵~
代码:
1 function initArray(n) { //创建二维数组 2 var strs = new Array(n); 3 for (var i = 0; i < n; i++) { 4 strs[i] = new Array(); 5 } 6 return strs; 7 } 8 var convert = function (s, numRows) { 9 if(numRows === 1) return s;//如果只有一层,直接返回原字符串 10 var strs = initArray(numRows), tmp = 0;//声明一个二维数组存储不同层数的字符串,tmp为当前为第几层 11 var flg = 1; //标记z字方向,1表示从0-n-1; 12 for (var i = 0; i < s.length; i++) { 13 //console.log('s->: ' + s[i] + ' ','tmp:-> ' + tmp); 14 strs[tmp] += s[i]; 15 //console.log('strs:-> ' + strs[tmp]); 16 if (flg) {//判断z字方向 17 if (tmp === numRows - 1) {//到达折点 18 flg = 0; 19 tmp-=2; 20 } 21 tmp++; 22 } 23 else { 24 if (tmp === 0) {//到达折点 25 flg = 1; 26 tmp+=2; 27 } 28 tmp--; 29 } 30 31 } 32 var str = ''; 33 for (var i = 0; i < strs.length; i++) { 34 //console.log('strs->' + strs[i]); 35 str += strs[i]; 36 } 37 return str; 38 };
最后结果为:
执行用时:128 ms, 在所有 JavaScript 提交中击败了38.83%的用户
内存消耗:44.4 MB, 在所有 JavaScript 提交中击败了23.04%的用户
离大侠再近一步!