6. Z字形变换【中】
将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
示例:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
代码:(找规律)
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows <= 1:
return s
res = ""
step = 2 * numRows - 2
for i in range(numRows):
for j in range(i,len(s),step):
res = res + s[j]
tmp = j + step - 2 * i
if i != 0 and i != numRows - 1 and tmp < len(s):
res = res + s[tmp]
return res
11. 盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2。
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
l = 0
r = len(height) - 1
res = (r - l) * height[l] if height[l] < height[r] else height[r]
while l < r:
if height[l] < height[r]:
res = res if res > (r-l)*height[l] else (r-l)*height[l]
l = l + 1
else:
res = res if res > (r-l)*height[r] else (r-l)*height[r]
r = r - 1
return res
心得:将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。