Leetcodeインタビューの質問46.数値を文字列に変換する

問題の説明

数値を指定すると、次のルールに従って文字列に変換されます。0は "a"に変換され、1は "b"に変換されます。...、11は "l"に変換されます。...、25は "z"に変換されます。数値には複数の翻訳がある場合があります。数値が持つ翻訳方法の数を計算する関数をプログラムしてください。

問題解決レポート

d p [ ] dp [i] 示されるnum第一から1第二の位置にi桁変換方法。

最初iのビットは1として単独で用いてもよく、第二又はi-1ケースの組み合わせ[ i-1ビットとi桁数が範囲[10、25]である必要があります]。
つまり: d p [ ] = d p [ 1 ] + d p [ 2 ] k dp [i] = dp [i-1] + dp [i-2] * ok
ok最初の意味i-1範囲[10、25]のビットとi番目の桁数を、それが1に比べて、0ではないれています。
特定の実装には、再帰および動的ルールがあります。

実装コード

  • 再帰的
class Solution {
public:
    int translateNum(int num) {
        if(num<10){
            return 1;
        }
        int res=translateNum(num/10),last=num%100;
        if(last>=10&&last<=25)
            res+=translateNum(num/100);
        return res;
    }
};
  • 動的プログラミング
class Solution{
    public:
        int translateNum(int num){
            string s=to_string(num);
            int n=s.size();
            vector<int>dp(n+1);
            dp[0]=1;
            for(int i=1;i<=n;i++){
                dp[i]=dp[i-1];
                if(i>1){
                    int t=stoi(s.substr(i-2,2));
                    if(t>=10&&t<=25){
                        dp[i]+=dp[i-2];
                    }
                }
            }
            return dp[n];
        }
};
MD_
139の元の記事を公開 賞賛8 10,000+ビュー

おすすめ

転載: blog.csdn.net/qq_27690765/article/details/105230525