【筆質問日記】357.数字の違う数字の数を数える

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して10日目です。クリックしてイベントの詳細をご覧ください

【筆質問日記】357.数字の違う数字の数を数える

この執筆日記の30番目の記事のタイトルは次のとおりです。357。異なる数の数を数える

1.トピックの説明:

ブラザーズ、今日は抜け穴をチェックするのが少し遅いです。私は戻ってきて質問を磨き続けました。幸いなことに、私は午前中にこの質問を読みました、そして私はすでに特定の考えを持っています。今見てみましょう。

2.この質問はどのような考えを検討しますか?あなたはどう思いますか?

この質問のタイトル情報は比較的明確で、内容は比較的小さいです。つまり、タイトルは特定の範囲を示し、左は閉じて右は開いており、範囲内の各桁の異なる数字のタイプと数です。見つかった

この数値の最大範囲は10の8乗です。つまり、1の後に80が続きます。

話題は明確で、一見あまり明確ではないように見えますが、しばらくは持ちこたえられないかもしれません。

大丈夫、それについて推論して、これが実際には数学の問題であることを理解することができます。私たちが高校や中学校にいたときに、そのような数学の問題を解決したことを今でも覚えています。

その後、私たちは同じを得ることができます

n = 3の場合、3桁の場合9*9*8、条件を満たす= 648種類と、前の91種類があり、739種類あります。

このように、これは実際には数学の問題であり、順列と組み合わせの問題であることが理解できます。

これで、この数学の問題を取り除くことができ、アイデアに従ってコードを翻訳することができます

3.コーディング

上記の論理と分析によれば、次のコードに変換できます。ここでは、明確にするために注意を払う必要があります。複数の桁がある場合は、各桁に表示される可能性のある異なる桁の数に注意を払う必要があります。 。

エンコーディングは次のとおりです。

func countNumbersWithUniqueDigits(n int) int {
    if n == 0 {
        return 1
    }
    if n == 1 {
        return 10
    }
    // 初始化好当 n等于 1 的时候,结果是 10中,并且当前的 1 位数的时候,符合条件的种数是 9,因为 0-9 中,第 1 位 不能是 0 开头
    res, cur := 10, 9
    for i := 0; i < n-1; i++ {
        // 第 1 位数,有 9 种,第 2 位有 9 种, 第 3 位 有 8 种,以此类推
        cur *= 9 - i
        res += cur
    }
    return res
}
复制代码

4.要約:

この問題のコードの量は比較的少なく、時間計算量を確認するのは難しくありません。これはO(n)であり、ループの数はn-1倍であり、ここでの空間計算量はO(1)であり、一定レベルのスペース消費を導入する

元のタイトルアドレス:357。異なる番号の番号の数を数えます

私は今日ここにいます、私が学んだこと、何か逸脱があれば、私を訂正してください

いいね、フォロー、お気に入りへようこそ

友達、あなたのサポートと励ましは、私が共有を続け、品質を向上させる動機です

さて、これが今回です

テクノロジーはオープンであり、私たちの精神はオープンでなければなりません。変化を受け入れ、太陽の下で生き、前進します。

私は小悪魔の少年哪吾です、好きで、フォローして集めて、また会いましょう〜

おすすめ

転載: juejin.im/post/7085361575556546590