配列:(発生数が1からnは1の整数である)周波数とに現れる1の整数

タイトル説明

1生じ1〜13の整数の数を計算し、そして生じ1で100〜1300倍の数の整数を計算?彼は特に約1〜13まで数えて、この目的を達成するために1は、したがって、6回の合計を表示さ1,10,11,12,13持つ数字が含まれていますが、彼Meizhe後ろの問題のために。ACMerは、あなたが彼を助けることを願っていますし、問題がより一般化され、範囲1が表示され、非負の整数の数(1からnまでの発生回数。1)は、すぐに任意のを見つけることができます。

問題解決のためのアイデア

三つのソリューション:

方法:各数値を介して順次、番号を含むその各々のか否かが判断されます。

方法2:文字列に翻訳デジタルと方法は、直接決定します。

参照コード

方法1:実行時間:17msがメモリを取る:9300K

1つの パブリック クラスソリューション{
 2      公共 int型 NumberOf1Between1AndN_Solution(int型N){
 3          INT RES = 0 4          のためには、int型 i = 0; iが<= N; iが++ ){
 5つの              RESは+ = 番号1(I)。
6          }
 7つの         戻りRES。
8      }
 9      
10      プライベート INT番号1(int型N){
 11          INT RES = 0 12          一方、(N> 0 ){
 13             もし(N%10 == 1 ){
 14の                  RES ++ 15              }
 16              N = N / 10 17          }
 18の         リターンRES。
19      }
 20 }
コードの表示

方法2:実行時間:45msがメモリを取る:11664k

1つの パブリック クラスソリューション{
 2      公共 int型 NumberOf1Between1AndN_Solution(int型N){
 3          INT RES = 0 4          StringBufferのS = 新規のStringBuffer();
5          ためには、int型 i = 0; iが<= N; iが++ ){
 6              s.append(I)。
7          }
 8          文字列str = s.toString()。
9          のためには、int型 i = 0; iが(str.lengthを<); iが++ ){
 10              であれば(str.charAt(I)== '1' ){
11の                  解像度++ ;
12              }
 13          }
 14の         リターンRES。
15      }
 16 }
コードの表示

おすすめ

転載: www.cnblogs.com/carry6/p/11519443.html