【LeetCode】 ZigZag Conversion 【Python || C++】雙語言實現
阿新 • • 發佈:2018-12-19
題目(來自leetcode網站):
實現了python版本
實現了C++版本
題目含義為,將輸入字串 首先根據numRows大小進行 列的 Z 字形 排列 後,把每一行直接拼接起來輸出;
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I R
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string s, int numRows);
Example 1:
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"
Example 2:
Input: s = "PAYPALISHIRING", numRows = 4 Output:"PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
解答:
#我的解法比較low 是根據人思考的邏輯來的,希望高手大佬指點一二 #python版本 class Solution: def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ a=[] if len(s)<=numRows or numRows==1: return s for i in range(numRows): a.append([]) i=0 j=0 while(i<len(s)): for k in range(numRows): if j == 0: a[k].append(s[i]) i+=1 if i >=len(s): break else: a[numRows-j-1].append(s[i]) i+=1 break j+=1 if j % (numRows-1)==0: j = 0 b="" for i in range(numRows): print(a[i]) for j in range(len(a[i])): b+=a[i][j] return b #C++版本 class Solution { public: string convert(string s, int numRows) { //string** a=new string*[numRows]; string a[numRows]; if(s.size()<=numRows || numRows ==1){ return s; } int i=0; int j=0; cout<<a[0]<<endl; while(i < s.size()){ for(int k=0;k<numRows;k++){ if(j==0){ a[k]+=s[i]; i++; if(i >=s.size()){ break; } }else{ a[numRows-j-1]+=s[i]; i++; break; } } j++; if(j%(numRows-1)==0){ j=0; } } string out; for(int i=0;i<numRows;i++){ out+=a[i]; } return out; } };