python_day_7:20180722

周日下午,台风天,阵雨。继续练习Python。
806. 写字符串需要的行数
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。
现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。
思路:关键是合成一张字典,k是字母表,v是widths,靠着这个字典,对S进行分析。关键控制两个变量:每行占据的资源occupy,当资源超过了最大范围100,lines行数就要+1,实现换行操作,同时occupy归零,在新的行上重新累加,最后返回[lines,occupy]构成的列表。
 1 class Solution:
 2     def numberOfLines(self, widths, S):
 3         lines=1
 4         zimu=dict(zip([chr(i) for i in range(97,123)],widths))
 5         occupy=0
 6         for i in S:            
 7             if occupy+zimu[i]<=100:
 8                 occupy+=zimu[i]
 9             else:
10                 lines+=1
11                 occupy=0
12                 occupy+=zimu[i]
13         return [lines,occupy]
566. 重塑矩阵
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
思路:先判断reshape能否成功的关键是行数和列数r和c有没有弄对,r*c是不是和nums的元素数相等,如果是的话,再把所有的元素依次输出到new;ist里去,然后按照r行c列的要求,依次填充进result里去,最后返回result
 1 class Solution:
 2     def matrixReshape(self, nums, r, c):
 3         newlist=[]
 4         for i in nums:
 5             for j in i:
 6                 newlist.append(j)
 7         if len(newlist)==r*c:
 8             result=[[0 for row in range(c)] for column in range(r)]
 9             
10             for i in range(len(newlist)):
11                 result[int((i-i%c)/c)][i%c]=newlist[i]
12             return result
13         else:
14             return nums
566. 重塑矩阵
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
思路:先判断reshape能否成功的关键是行数和列数r和c有没有弄对,r*c是不是和nums的元素数相等,如果是的话,再把所有的元素依次输出到new;ist里去,然后按照r行c列的要求,依次填充进result里去,最后返回result
 1 class Solution:
 2     def matrixReshape(self, nums, r, c):
 3         newlist=[]
 4         for i in nums:
 5             for j in i:
 6                 newlist.append(j)
 7         if len(newlist)==r*c:
 8             result=[[0 for row in range(c)] for column in range(r)]
 9             
10             for i in range(len(newlist)):
11                 result[int((i-i%c)/c)][i%c]=newlist[i]
12             return result
13         else:
14             return nums

 

posted @ 2018-07-22 16:23  code_in_py  阅读(126)  评论(0编辑  收藏  举报