タイトル説明
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 }