ああ、私はあなたが言っていることがわかると思います。私があなたを正しく理解していれば、すべての文字が同じ大文字小文字にならないように、文字列内の文字を大文字にするすべての可能な方法を見つけようとしています。つまり、abc を指定すると、
abC aBc aBC Abc AbC ABc
だがしかし
abc ABC
これらのバージョンのすべての文字の大文字と小文字は同じだからです。
これが必要な場合、長さ n の空でない文字列でこれを行う方法の数は 2 n - 2 で与えられます。直観的に、この背後にある理論的根拠は次のとおりです。n 文字の文字列が与えられた場合、その文字列内のすべての文字を大文字にする方法は 2 n通りあります。これは、各文字が残りの文字とは独立して、その文字が 2 つの状態 (大文字または小文字) のいずれかになる可能性があるためです。これらすべての組み合わせを考慮すると、禁止したいのは、すべての文字が大文字であるバージョンとすべての文字が小文字であるバージョンの 2 つだけです。
あなたの質問では、n 要素シーケンスの組み合わせの数は n! であると述べました。これは正しくありません。あります!n 要素シーケンスの順列(各要素が異なると仮定)。例えば、3つあります!= シーケンス abc の 6 つの順列:
abc acb bac bca cab cba
すべての文字に同じ大文字を使用せずに 3 文字のシーケンスを大文字にする方法が 6 通りあり、abc の順列が 6 通りあるという事実は、完全な偶然の一致です。シリーズの他の項を見ると、それらが 2 つの場所 (2 と 3) でのみ一致することがわかります。
n = 1 2 3 4 5 6
Permutations (n!) 1 2 6 24 120 720
Mixed-case capitalizations (2^n - 2) 0 2 6 14 30 62
上と下だけでなく、より多くのケースを許容する場合 (たとえば、k 個の異なるバージョン)、これを一般化して値 k n - kを取得できます。k n 個の異なる組み合わせがあり、そのうちの k 個がすべて同じ大文字。
お役に立てれば!