leetcode 6. Z字形变换

对于这道题,最好的办法莫过于找到这个函数,一次遍历,直接安排,就是这样。

这个函数我们可以由繁杂到简单,由具体到抽象这样化简,这样形成一个终极有用函数。

首先呢,给定字符长度和行数,我们就可以构建一个矩阵,行为行数,列为字符长度/行数+1,多几个或者多一列是没有关系的,毕竟都是0,然后呢,分为向下排列和斜上排列,向下排列就一个行数,斜上排列是行数-2(保证行数大于3),算了算了,就开一个二维数组,然后遍历两遍,时间复杂度仍然为O(n),没什么关系的。

看看网上,也是差不多。

慢着,放弃不是你的性格啊小衰?!!今天我就要把这个函数搞出来,做一个标新立异的人。

这个函数,它的形式是这样的:
int new_pos(string s, int pos, int line);
输入字符串,字符在字符串中的位置,和行数,得出它的新位置,然后新字符串直接
new_str[new_pos(s, i, line)] = s[i];
就解决了!感觉不错。

首先要定位这个字符在二维数组中的位置,字符串有清晰的划分,前n个是在一列,多少行就是在n里面的个数,后n-2个是在不同的列,紧接着又是n个。。。貌似用if更直接美观啊?

好吧好吧我放弃了,既然if一样快,我还搞个毛。。。因此,如果是时间复杂度一样的话,没必要去弄一些奇技淫巧。

这道题说的很宽泛,因此我们就必须注意其极限条件,除非它说没有空串,你才能不考虑空串,否则的话就需要考虑。一般编程过程就是先把大纲编好,然后再普遍情况通过,然后再考虑极限条件,只有这样才能做对一个题。如何考虑极限条件呢?就是按照极限条件进行往下推导,哪里有不对改哪里,就这样。

而最快的办法,就是用调bug的方法。

如果你非得用自己看的话,那就在编程的时候,知道哪里有缺陷,一个todo记下来,编完了再改正,就这样,如果特殊情况实在杂糅不进去的,你就要新开一个if,就这样更简单。
如果这样做千万要容量要够,实际上,数组法根本是不可行的,记住列要设的跟字符串长度一样长,为什么,因为如果行相当长,那么等斜着的时候,就会浪费非常多的空间,遍历的时候时间也会很很长,因此公式法还是非常有必要的。





























 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值