Z字形变换(LeetCode第6题)
題目描述:(力扣)
廢話后面說,直接貼代碼
提交,代碼效率:
(大神看到這可以慢走了(..) )
看不懂代碼思路的同學,可以耐心再聽我嘮一嘮(ノ゚▽゚)
仔細觀察一下這個圖案,我們能想到最快的辦法就是先把“LDR”提出來,再依次把“EOEII”、“ECIHN”、“TSG”提取出來,將它們連起來就好了。難點在于怎么知道‘L’的下一個提取目標是‘D’呢。
(在這里,我把圖案中每一個Z字形中間出現的列數標記為m,像上圖,當n=4的時候,m=2。不難發現m和n之間的規律是m=n-2。)
**情況1:觀察第一行下標變化 ( 當n=4時,L跳躍到D,下標需要增加6=n+m) 可以發現這種情況適用于第一行和最后一行。
**情況2:中間行下標變化(1<?<n)
n=4,下標跳躍序列:
2-> +4,+2,+4,+2
3-> +2,+4,+2,+4
n=5,下標跳躍序列:
2-> +6,+2,+6,+2
3-> +4,+4,+4,+4
4-> +2,+6,+2,+6
n=6,下標跳躍序列:
2-> +8,+2,+8,+2
3-> +6,+4,+6,+4
4-> +4,+6,+4,+6
5-> +2,+8,+2,+8
相信你們已經發現了一些啥了,沒錯,中間行的跳躍序列排在一塊后,從列看下來一列遞減(down)一列遞增(up),所以我們只需要知道他們的初始值與m、n的關系就可以了。
int down = ( m + n) - 2, up = 2;//設置up、down的初值每行的下標跳躍只要遵守當前設定好的up、down值,就可以將中間行的字符串順利提取。這時候,我們只需要在提取第n行和第n+1行之間,將up、down做遞增和遞減:
down -= 2;up += 2;//每結束一次中間行的循環up和down要變一次好了,這就是這周分享的全部內容啦
(我太懶了只挑了我覺得自己做的還挺好的這一題)
繼續加油吧奧利給!
總結
以上是生活随笔為你收集整理的Z字形变换(LeetCode第6题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何取消微信异地登录保护(微信异地登录怎
- 下一篇: 工行贵金属交易时间段