記事のディレクトリ
パイソン白Leetcodeブラシタイトルコース第56号、No.60は、k番目に配置されたインターバル挿入部、最後のワードの長さ、マトリックスⅡ螺旋を合わせ
EDITORIAL:
大学生病院のコンピュータは、常に唯一のコースを学習ラフ、学校のコンピュータでは十分ではありません、休日無料期間の特に大規模な数は、白として、ルカの道をインターンシップと感じたように、私は無駄に時間を費やす必要はありません。ブラシLeetcode試験にこのプラットフォームを選んだ私はそう。私は、自己Pythonで今すぐ利用Python3.8ブラシ試験をC言語の基本的なプログラミングを学びました。今私はPythonは非常に熟練していないマスターは、また、学習されませんどのようなアルゴリズム、第1の最適化アルゴリズムに単純に未来は時間再最適化を持っているものの複雑さのために、問題を解決するために、考慮していないのです。計画された5の順序は、ログを書いて自分の学習過程を書いていくつかの助けを果たしている他の初心者プログラマがそれに証人としてみなされている願っています。
ブラシLeetCode私との懸念があるかもしれません、私はいつもLeetCode試験のpython3ソリューションを送信するか、探索することができます。
便利な検索、そして私たちはああのような次のポイントに焦点を当てることができ、ありがとうございました!
·················································· ·················································· ·················································· ······
問題のソリューションフレームワーク:
1.题目,难度
2.题干,题目描述
3.题解代码(Python3(不是Python,是Python3))
4.或许有用的知识点(不一定有)
5.解题思路
6.优解代码及分析(当我发现有比我写的好很多的代码和思路我就会写在这里)
·················································· ·················································· ·················································· ······
第56号合わせた範囲
難易度:中等度の
件名の説明:
解釈コード(Python3.8)
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort()
l=len(intervals)
res=[]
if l==0:
return res
i=0
left=intervals[i][0]
right=intervals[i][1]
while i<l:
left=intervals[i][0]
right=intervals[i][1]
while i<l-1 and intervals[i+1][0]<=right:
i+=1
right=max(intervals[i][1],right)
res.append([left,right])
i+=1
return res
アイデアを、問題解決:
第一の位置によって最初のソート、[1,4]、B =よう=ように、2つの間隔がオーバーラップ行うか否かを決定する方法を、次に [2,3]?。[1]> = B [ 0]は2つの間隔が重なって示しています。
しかし、どのようにこの間隔は?何かを見つけるために
左の位置が決定されなければならない、[0]で、右の位置が最大である([1]、 B [1])。そこで、我々は、全範囲を見つけることができます:[1,4]。
57号。挿入間隔
難易度:難しい
件名の説明:
解釈コード(Python3.8)
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
def merge(intervals):
intervals.sort()
l=len(intervals)
res=[]
i=0
left=intervals[i][0]
right=intervals[i][1]
while i<l:
left=intervals[i][0]
right=intervals[i][1]
while i<l-1 and intervals[i+1][0]<=right:
i+=1
right=max(intervals[i][1],right)
res.append([left,right])
i+=1
return res
intervals.append(newInterval)
return merge(intervals)
問題解決のアイデア:
この質問は見ることが困難であり、実際には、問題の根本困難であると同様に、この質問は間隔の範囲を追加し、スペースをマージすることです(前の質問「番号付き「第56号の連結の範囲」。 56合成部「と同じ動作)。したがって、我々は最初のマージ機能を定義する必要があります(問題「第56号。組み合わせた範囲」は同じ主な機能同上)、そしてnewIntervalは、その後、あなたがマージ機能を呼び出すことができる間隔に新しいセクションを追加します。
No.58。最後のワード長
難易度:簡単な
タイトル説明:
解釈コード(Python3.8)
class Solution:
def lengthOfLastWord(self, s: str) -> int:
res=0
s=s.strip()
for i in range(len(s)-1,-1,-1):
if s[i]!=' ':
res +=1
else:
break
return res
おそらく、便利な知識:
この質問は、Pythonのストリップ()関数で、ストリップ()関数で使用することができますが、指定した文字列(デフォルトはスペースや改行である)、または文字列の先頭と末尾を削除するために使用されます。(注:このメソッドは、文字や始まりの終わりを削除することができ、文字の中央部分を削除することはできません。)
解题思路:
这道题比较简单,先使用strip()函数去掉字符串头尾的空格,之和从后往前判断字符串是否为空格即可。
No.59.螺旋矩阵Ⅱ
难度:中等
题目描述:
题解代码(Python3.8)
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix=[[0 for _ in range(n)] for _ in range(n)]
left,right,top,bottom = 0,n-1,0,n-1
num,num_max = 1,n*n
while num <= num_max:
for i in range(left,right+1): #顶端,从左到右(此处多一个数)
matrix[top][i] = num
num += 1
for i in range(top+1,bottom+1): #右端,从上到下
matrix[i][right] = num
num += 1
for i in range(right-1,left-1,-1): #底端,从右到左
matrix[bottom][i] = num
num += 1
for i in range(bottom-1,top,-1): #左端,从下到上(此处少一个数)
matrix[i][left] = num
num += 1
left += 1
right -= 1
top += 1
bottom -=1
return matrix
或许有用的知识点:
matrix=[[0 for _ in range(n)] for _ in range(m)]可以创建一个m行n列的全0数组。
解题思路:
这道题先创建一个空数组,再将数字依次递增地按照顺序一层一层填入数组即可。注意,填入数组的四个方位的长度最好不要相等,否则当最内层只有一个元素时会发生错误,下面有一张图展示了数组填数的方法。
No.60.第k个排列
难度:中等
题目描述:
题解代码(Python3.8)
class Solution:
def getPermutation(self, n: int, k: int) -> str:
def backtrack(index,k):
if index == n:
return
cnt = factorial[n-1-index]
for i in range(1,n+1):
if used[i]:
continue
if cnt < k:
k -= cnt
continue
path.append(i)
used[i] = True
backtrack(index+1,k)
if n == 0:
return ''
used = [False for _ in range(n+1)]
path = []
factorial = [1 for _ in range(n+1)]
for i in range(2,n+1):
factorial[i] = factorial[i-1]*i
backtrack(0,k)
return ''.join([str(x) for x in path])
或许有用的知识点:
这道题要用到回溯算法。
used = [False for _ in range(n+1)]可以创建一个容量为n的布尔值型一维数组。
这道题严格来说并不是回溯算法,但是需要用到回溯算法中的‘剪枝’操作,而且这道题只有一条分支是有效的,因此回溯函数种不用设置‘状态返回’环节。
アイデアを問題解決:
私は少し、見つかった時間を試してみる暴力的な手段で始まったこの質問。また、発見された。この質問は、実際に木である、と我々は解決するためにバックトラッキングアルゴリズムを使用できるように一つだけの葉は、効果的なソリューションです。この質問と1つの分岐のみが有効であることがあるため、そのバック関数種のステータス返信」リンクを設定しないでください。三の成分は、テンプレートバックトラッキングアルゴリズムを適用し、バックトラッキングアルゴリズムは次のとおりです
。1.エクスポート後戻り:インデックス位置は、N-等しく;
2.バック本体:トラバース[0、N + 1)、番号が使用される場合、続行もしあれば、CNT <K、K - = CNTと続け、最初のCNT場合> = kは、iはパスに記録され、レコードの数が使用され、バックバックトラックの次のラウンド(インデックス+ 1、K )。
3.ステータス戻り値:この質問が設定されていません。
バック関数の定義の後、我々はまた、容量NブールタイプIが使用される番号を格納するための一次元配列を作成する必要があり、その後、nは1次元アレイ、ストレージ[1の容量を作成し、N + 1)されています階乗;機能をバックトラックした後に参照することができます。