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