Z字形變換

Z字形變換

將字符串"PAYPALISHIRING"以Z字形排列成給定的行數(shù):

P ? ? ?A ? ? ? H ? ? N

A ?P ?L ?S ? I ? I ? G

Y ? ? ? I ? ? ? R

之后從左往右,逐行讀取字符:"PAHNAPLSIIGYIR"

實現(xiàn)一個將字符串進行指定行數(shù)變換的函數(shù):

string convert(string s, int numRows);

示例?1:

輸入:s = "PAYPALISHIRING", numRows = 3輸出:"PAHNAPLSIIGYIR"

示例?2:

輸入:s = "PAYPALISHIRING", numRows =?4輸出:"PINALSIGYAHRPI"

def convert(self, s, numRows):

????d =list(s)

????lenght =len(s)

????if numRows==1:

????????return s

????su1 =2*(numRows-1)

????count1 = lenght//su1

????duoyu = lenght-count1*su1

????if duoyu ==0:

????????for iin range(lenght):

????????????if i % su1 ==0:

????????????????d[i // su1] = s[i]

????????????elif (i-numRows+1) % (su1) ==0:

????????????????wh = i // (su1)

????????????????d[(numRows-2)*count1*2+count1+wh] = s[i]

????????????else:

????????????????if i%(su1)

????????????????????zh=0

? ? ? ? ? ? ? ? ? ? if i//(su1)>0:

????????????????????????zh = i//(su1)*2

? ? ? ? ? ? ? ? ? ? index = ((i % (su1)-1)*2*count1+count1)+zh

????????????????????d[index] = s[i]

????????????????else:

????????????????????zh=1

? ? ? ? ? ? ? ? ? ? if i//(su1)>0:

????????????????????????zh = i//(su1)*2+1

? ? ? ? ? ? ? ? ? ? index = ((su1 - i%(su1)-1 )*2 * count1 + count1) + zh

????????????????????d[index] = s[i]

????????return? ''.join(d)

????elif duoyu >0 and duoyu<=numRows:

? ?????for iin range(lenght):

????????????if i % su1 ==0:

????????????????d[i // su1] = s[i]

????????????elif (i-numRows+1) % (su1) ==0:

????????????????if duoyu > i % (su1) % numRows:

????????????????????do = i % (su1) % numRows

????????????????else:

????????????????????do = duoyu

????????????????wh = i // (su1)

????????????????d[(numRows-2)*count1*2+count1+do+wh] = s[i]

????????????else:

????????????????if i%(su1)

????????????????????if duoyu > i%(su1)%numRows:

????????????????????????do = i%(su1)%numRows

????????????????????else:

????????????????????????do = duoyu

????????????????????zh=0

? ? ? ? ? ? ? ? ? ? if i//(su1)>0:

????????????????????????zh = i//(su1)*2

? ? ? ? ? ? ? ? ? ? index = ((i % (su1)-1)*2*count1+count1)+zh+do

????????????????????d[index] = s[i]

? ? ? ? ? ? ? else:

????????????????????if duoyu > (su1 - i%(su1))%numRows:

????????????????????????do = (su1 - i%(su1))%numRows

????????????????????else:

????????????????????????do = duoyu

????????????????????zh=1

? ? ? ? ? ? ? ? ? ? if i//(su1)>0:

? ? ? ? ? ? ? ? ? ? ? ?????zh = i//(su1)*2+1

? ? ? ? ? ? ? ? ? ? index = ((su1 - i%(su1)-1 )*2 * count1 + count1) + zh + do

????????????????????d[index] = s[i]

????????return? ''.join(d)

????else:# duoyu>numRows

? ? ? ? for iin range(lenght):

????????????if i % su1 ==0:

????????????????d[i // su1] = s[i]

????????????elif (i-numRows+1) % (su1) ==0:

????????????????do = duoyu-1

? ? ? ? ? ? ? ? wh = i // (su1)

????????????????d[(numRows-2)*count1*2+count1+do+wh] = s[i]

????????????else:

? ? ? ? ? ? ? ? if i%(su1)

????????????????????gh = numRows - duoyu % numRows-1

? ? ? ? ? ? ? ? ? ? if i % (su1) <= gh:

????????????????????????do = i % (su1) % numRows

????????????????????else:

????????????????????????do = (i % (su1) % numRows - gh) *2 + gh

????????????????????zh=0

? ? ? ? ? ? ? ? ? ? if i//(su1)>0:

????????????????????????zh = i//(su1)*2

? ? ? ? ? ? ? ? ? ? index = ((i % (su1)-1)*2*count1+count1)+zh+do

????????????????????d[index] = s[i]

????????????else:

????????????????????if duoyu >= (su1 - i%(su1))%(numRows-1):

????????????????????????gh = numRows - duoyu % (numRows-1)

????????????????????????if (su1 - i % (su1)) % numRows <= gh:

????????????????????????????do = (su1 - i%(su1)) % numRows

????????????????????????else:

????????????????????????????if i>su1*count1:

????????????????????????????????do = ((su1 - i % (su1)) % numRows - gh) *2 + gh

? ? ? ? ? ? ? ? ? ?????????else:

????????????????????????????????do = ((su1 - i%(su1)) % numRows - gh) *2 + gh

? ? ? ? ? ? ? ? ? else:

????????????????????????do = duoyu

????????????????????zh=1

? ? ? ? ? ? ? ? ? ?if i//(su1)>0:

????????????????????????zh = i//(su1)*2+1

? ? ? ? ? ? ? ? ? ? index = ((su1 - i%(su1)-1 )*2 * count1 + count1) + zh + do

????????????????????d[index] = s[i]

return? ''.join(d)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,142評論 0 2
  • Android的自啟動類似于Windows的開機啟動,允許開發(fā)者讓自己的APP在開機的時候做一些操作,如啟動一個后...
    wzjing閱讀 16,280評論 1 6
  • 一直都不會覺得,我的第一篇簡書文章會寫感情。但今天所發(fā)生的事情,使我的情緒一直都沒有平靜下來,所以我想要寫出這...
    安耐閱讀 768評論 3 4
  • 本文#感悟三下鄉(xiāng),青春助夢行#活動,本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺發(fā)表過。 隨著最后一場考試的結(jié)束,我的...
  • #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字?王小花 2、他幾歲了? 10歲 ...
    我心安住閱讀 252評論 0 0

友情鏈接更多精彩內(nèi)容