[leetcode: Python]6. ZigZag Conversion
来源:互联网 发布:parent node children 编辑:程序博客网 时间:2024/05/19 18:16
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 NA P L S I I GY 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
阅读全文
0 0
- 6. ZigZag Conversion Leetcode Python
- [Leetcode]6. ZigZag Conversion @python
- [leetcode: Python]6. ZigZag Conversion
- [Leetcode] ZigZag Conversion @Python
- 【Leetcode】【python】ZigZag Conversion
- Leetcode题解(Python): 6. ZigZag Conversion
- LeetCode 6. ZigZag Conversion(Python)兼翻译
- LeetCode 6. ZigZag Conversion
- LeetCode --- 6. ZigZag Conversion
- LeetCode 6.ZigZag Conversion
- [Leetcode] 6. ZigZag Conversion
- 【leetcode】6. ZigZag Conversion
- [LeetCode] 6.ZigZag Conversion
- LeetCode - 6. ZigZag Conversion
- [leetcode] 6. ZigZag Conversion
- Leetcode 6. ZigZag Conversion
- leetcode 6. ZigZag Conversion
- leetcode 6. ZigZag Conversion
- Retrofit 2.0 (v2.0.0-beta4)
- VMWare虚拟机提示:开启模块disk失败
- W3Cschool Java 8新特性----> Lambda 表达式
- log4j介绍和配置
- 欢迎使用CSDN-markdown编辑器
- [leetcode: Python]6. ZigZag Conversion
- C语言动态内存申请
- 18、二叉树的镜像
- 闭包理解
- android开发中高德地图关键字查询小问题
- PAT 乙级 1053. 住房空置率 (20)
- 用Tensorflow搭建CNN卷积神经网络,实现MNIST手写数字识别
- CentOS7使用firewalld打开关闭防火墙与端口
- Spring Boot 配置Druid数据源