【LeetCode] Strobogrammatic数II

strobogrammatic数(逆さまに見た)180度回転させたときに同じに見える番号です。

長さのものであるすべてのstrobogrammatic番号を検索= N。

例えば、
n = 2のリターンを考えます  ["11","69","88","96"]

 

いくつかの例を実行します

N = 0、NULL。
N = 1、[0,1]、[8]
N = 2、[11、69、88、96]
、N = 3、[101、609、808、906、
111、619、818、916、
181、689、888 、986]
N = 4、[1001 6009、8008、9006、
1111、6119、8118、9116、
1691、6699、8698、9696、
1881、6889、8888、9886、
1961、6969、8968、9966]

ブレーンストーミング:
所与のnについて、リスト内のその結果の各々は、以下を実行することによって生成されます。
長さnの結果の各々について- 2:
その左と右の1に1を加えます。
その左と右の9に6を追加します。
その左と右の8に8を追加します。
その左と右の6に9を追加します。
その左と右の0に0を追加します。(特別な場合:最終結果を構築する際に0がいずれかの末端に付加することができません)

再帰溶液:
ランタイム:Nに関して結果の数である3 * 2 ^(N-1)用のn> = 1、nが奇数です。
5 * 2 ^(N-2)は、n> = 2 N偶数であるため。
その実行時間は指数関数O(2 ^ n)があります。ソリューションの指数関数的な数があるので、それは最適です。

空間複雑:奇数のnに対して、3 *(2 ^(N-1)+ 2 ^(N-3)+ ......... + 1)O(2 ^ N)
nが偶数の場合と類似。

 

パブリック クラスソリューション{
     公共の一覧<文字列> findStrobogrammatic(int型のn){
        リスト <StringBuilderの> sbList = findRecursive(N、N)。
        一覧 <文字列> ANS = 新しい ArrayListを<> ();
        (StringBuilderのSB:sbList){
            ans.add(sb.toString())。
        }
        リターン歳;
    }
    
    プライベートリスト<のStringBuilder> findRecursive(int型 currLen、int型targetLen)
    {
        一覧 <StringBuilderの> R = 新しいのArrayList <のStringBuilder> ();
        もし(currLen == 0 
        {
            r.add(新しい StringBuilderの( "" ));
            戻りR;
        }
        もし(currLen == 1 
        {
            r.add(新しい StringBuilderの( "0" ));
            r.add(新しい StringBuilderの( "1" ));
            r.add(新しい StringBuilderの( "8" ));
            戻りR;
        }
        
        一覧 <StringBuilderの>短い= findRecursive(currLen - 2 、targetLen)。
        (StringBuilderのSB:短いです)
        {
            もし(currLen!= targetLen)
            {
                r.add(新しい StringBuilderの( "0")APPEND(SB).append( "0"。 ));
            }
            r.add(新しい StringBuilderの( "1")のappend(SB).append( "1"。 ));
            r.add(新規のStringBuilder( "6")アペンド(SB).append( "9" ));
            r.add(新しい StringBuilderの( "8")APPEND(SB).append( "8"。 ));
            r.add(新規のStringBuilder( "9")アペンド(SB).append( "6" ));
        }
        
        戻りR;
    }
}

 

関連問題

【LeetCode] Strobogrammatic数III

おすすめ

転載: www.cnblogs.com/lz87/p/7038575.html