2的個數(Number of Digit One 的改編題)

                                                         2的個數

                                                                                 時間限制:3秒    空間限制:32768K

題目描述

請編寫一個方法,輸出0到n(包括n)中數字2出現了幾次。

給定一個正整數n,請返回0到n的數字中2出現了幾次。

測試樣例:

10
返回:1
每10個數, 有一個個位是2, 每100個數, 有10個十位是2, 每1000個數, 有100個百位是2.  使用一個循環, 每次計算單個位上2得總個數(個位,十位, 百位...).

例子:

以算百位上2爲例子:   假設百位上是0, 2, 和 >=3三種情況:

    case 1: n=4241092, a= 42410, b=92. 計算百位上2的個數應該爲 4241 *100 次

    case 2: n=4241292, a= 42411, b=92. 計算百位上2的個數應該爲 4241 *100 + (92+1) 次.

    case 3: n=4241592, a= 42415, b=92. 計算百位上2的個數應該爲 (4241+1) *100 次.

以上三種情況可以用 一個公式概括:

(a+7)/10*x+(a%10==2)*(b+1);//

public class Count2 {

	public int countN(int n) {
		int count = 0;
		for (int x = 1; x < n; x *= 10) {

			int a = n / x, b = n % x;

			count += (a + 7) / 10 * x;

			if (a % 10 == 2) {
				count += b + 1;
			}
		}
		return count;
	}

}

測試地址:[在線測試](http://www.nowcoder.com/practice/31a9495eb02844fb8c0e9ab101053f53?tpId=8&tqId=11066&rp=4&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章