[leetcode: Python]6. ZigZag Conversion
2017-05-18 17:33
281 查看
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)
And then read line by line:
Write the code that will take a string and make this conversion given a number of rows:
方法一:176ms
寻找字母下标与其所在行的对应关系:
编写一个函数convertRowNum(idx, numRows)
输入当前的字符下标idx与行数numRows,返回其所在的行号rowNum
函数如下:
zigzag字符串中字母所在的行号序列为:
上述序列是一个长度为 2 * numRows - 2 的无限循环
方法二:149ms
方法三:116ms
方法四:92ms
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 text, int nRows);
convert("PAYPALISHIRING", 3)should return
"PAHNAPLSIIGYIR".
方法一:176ms
寻找字母下标与其所在行的对应关系:
编写一个函数convertRowNum(idx, numRows)
输入当前的字符下标idx与行数numRows,返回其所在的行号rowNum
函数如下:
def convertRowNum(self, idx, numRows): return numRows -1 - abs(numRows - 1 - i % (2 * numRows - 2))
zigzag字符串中字母所在的行号序列为:
1, 2, ... , numRows - 1, numRows, numRows - 1, ... 2, 1
上述序列是一个长度为 2 * numRows - 2 的无限循环
class Solution(object): def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows == 1 or numRows >= len(s): return s final = [[] for row in xrange(numRows)] for i in range(len(s)): final[(numRows - 1 - abs(numRows - 1 - i % (2 * numRows - 2)))].append(s[i]) return ''.join([''.join(final[i]) for i in range(numRows)])
方法二:149ms
class Solution(object): def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows<=1: return s res = "" n=len(s) for i in range(numRows): for j in range(i,n,2*(numRows-1)): res += s[j] if i>0 and i<numRows-1 and j+2*(numRows-1-i)<n: res +=s[j+2*(numRows-1-i)] return res
方法三:116ms
class Solution(object): def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows <= 1 or len(s) <= numRows: return s i, j = 0, 1 ss = [''] * numRows for v in s: ss[i] += v if i == numRows - 1: j = -1 elif i == 0: j = 1 i += j return ''.join(ss)
方法四:92ms
class Solution(object): def convert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows == 1: return s i = 0 change = -1 newstr = ['']*numRows for char in s: if i == 0 or i==numRows-1: change = -change newstr[i] = newstr[i] + char i = i + change result = ''.join(newstr) return result
相关文章推荐
- 【LeetCode with Python】 Wildcard Matching
- 【LeetCode with Python】 Generate Parentheses
- 【LeetCode with Python】 Remove Duplicates from Sorted Array
- 【LeetCode with Python】 Binary Tree Preorder Traversal
- 【LeetCode with Python】 Maximum Depth of Binary Tree
- 【LeetCode with Python】 Binary Tree Inorder Traversal
- 【LeetCode with Python】 Pow(x, n)
- 【LeetCode with Python】 Maximum Subarray
- 【LeetCode with Python】 Insertion Sort List
- 【LeetCode with Python】 Best Time to Buy and Sell Stock
- 【LeetCode with Python】 Swap Nodes in Pairs
- 【LeetCode with Python】 Reverse Words in a String
- 【LeetCode with Python】 Remove Duplicates from Sorted List
- 【LeetCode with Python】 String to Integer (atoi)
- 【LeetCode with Python】 LRU Cache
- 【LeetCode with Python】 Remove Element
- 【LeetCode with Python】 Validate Binary Search Tree
- 【LeetCode with Python】 Pascal's Triangle
- 【LeetCode with Python】 Balanced Binary Tree
- 【LeetCode with Python】 Minimum Depth of Binary Tree