Python
 Computer >> コンピューター >  >> プログラミング >> Python

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
  • temp:=temp+文字列としてカウント+curr
  • return s
  • 理解を深めるために、次の実装を見てみましょう-

    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"

    1. Pythonでノードと子孫の違いを見つけるプログラム

      二分木があるとすると、ノードとその子孫の間で最大の絶対差を見つける必要があります。 したがって、入力が次のような場合 その場合、最大の絶対差はノ​​ード8と1の間であるため、出力は7になります。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 正と負の無限大のリストを返す left:=dfs(ノードの左側) right:=dfs(ノードの右) res:=(left [0]、right [0]の最小値とノードの値、およびleft [1]、right [1]とノードの値の最大値)とのペア ans:

    2. 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]のリス