--算法恩仇录--实战篇--力扣(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%的用户
离大侠再近一步!
原文地址:https://www.cnblogs.com/Samo-Li/p/13600649.html