PythonのLookandSayシーケンスでn番目の用語を見つけるプログラム
「LookandSay」シーケンスでn番目の項を生成する必要がある数nがあるとします。これは、いくつかの用語が以下のようなシーケンスです-
- 1
- 11
- 21
- 1211
- 111221
文字列は次のように読み取られます
- 1(1)
- 11(One 1)前の1を読んで、「One1」と言います
- 21(Two 1)前の11を読んで、「Two1」と言ってください
- 1211(One 2 one 1)前の21を読んで、「One 2one1」と言います
- 111221(One 1 1 2 2 2 1)前の1211を読んで、「One 1 1 221」と言います
数n、1 <=n <=30があるとすると、n番目の項を生成する必要があります。これを解決するには、このアプローチに従います-
- set s:=“ 1”
- n =1の場合、sを返します
- for i:=2からn+ 1
- j:=0
- temp:=空の文字列
- curr =空の文字列とカウント:=0
- j
- currが空の文字列の場合、
- curr:=s [j]、カウント:=1、jを1増やします
- それ以外の場合、currがs [j]の場合、
- カウントとjを1増やします
- それ以外の場合:
- temp:=temp+文字列としてカウント+curr
- curr=空の文字列
- count:=0
- currが空の文字列の場合、
- temp:=temp+文字列としてカウント+curr
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def solve(self, n): s = "1" if n == 1: return s for i in range(2,n+1): j = 0 temp = "" curr = "" count = 0 while j <len(s): if curr =="": curr=s[j] count=1 j+=1 elif curr == s[j]: count+=1 j+=1 else: temp+= str(count) + curr curr="" count = 0 temp+=str(count) + curr s=temp return s ob = Solution() n = 5 print(ob.solve(n))
入力
5
出力
"111221"
-
Pythonでノードと子孫の違いを見つけるプログラム
二分木があるとすると、ノードとその子孫の間で最大の絶対差を見つける必要があります。 したがって、入力が次のような場合 その場合、最大の絶対差はノード8と1の間であるため、出力は7になります。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 正と負の無限大のリストを返す left:=dfs(ノードの左側) right:=dfs(ノードの右) res:=(left [0]、right [0]の最小値とノードの値、およびleft [1]、right [1]とノードの値の最大値)とのペア ans:
-
Pythonでパスカルの三角形のn番目の行を見つけるプログラム
数値がnであるとすると、パスカルの三角形のn番目(0インデックス)の行を見つける必要があります。パスカルの三角形は次のように作成できることを知っています- 一番上の行には、1の配列があります。 次の行は、上と左に番号を追加し、上と右に番号を追加することによって作成されます。 いくつかの行は次のとおりです- したがって、入力が4のような場合、出力は[1、4、6、4、1]になります。 これを解決するには、次の手順に従います- nが0と同じ場合、 リターン[1] nが1と同じ場合、 return [1,1] ls:=[1,1]のリスト、temp:=[1,1]のリス