LeetCode 6. Z 字形变换
Posted 咸鱼の小窝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 6. Z 字形变换相关的知识,希望对你有一定的参考价值。
题意
根据给定的行数,将字符串从上到下、从左到右进行Z字形排列,详见样例。
思路
- 想法1:直接模拟,时间复杂度(O(n))。为什么运行时间只击败了21%的用户,内存消耗却击败了83%的用户?难道有什么空间换时间的方法?
- 想法2:看了官方题解,并没有。但是,可以通过计算每个位置的数学关系来解答。直接模拟的方法也可以优化为一维数组。时间复杂度(O(n))。
代码
代码1(二维数组直接模拟):
class Solution { public: string convert(string s, int numRows) { if(numRows == 1) return s; int len = s.size(); char res[numRows][len]; memset(res, 0, sizeof(res)); bool flag = true; int col = 0, row = 0; for(int i = 0; i < len; ++i) { if(flag) //down { res[row++][col] = s[i]; if(row == numRows) { flag = false; --row; //back } } else //up { res[--row][++col] = s[i]; if(row == 0) { flag = true; --i; } } } /* for(int i = 0; i < numRows; ++i, puts("")) for(int j = 0; j <= col; ++j) cout << res[i][j]; */ string ans = ""; for(int i = 0; i < numRows; ++i) for(int j = 0; j <= col; ++j) if(res[i][j] != 0) ans.push_back(res[i][j]); return ans; } };
代码2(一维数组直接模拟):
代码3(数学关系):
总结
这种关系的一般都会和数学(找关系式?)有关系的,如以前遇到过的“蛇形填数”。
以上是关于LeetCode 6. Z 字形变换的主要内容,如果未能解决你的问题,请参考以下文章