【劍指offer】-1~n整數中1出現的次數-31/67

1. 題目描述

求出113的整數中1出現的次數,並算出1001300的整數中1出現的次數?爲此他特別數了一下113中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。

2. 題目分析

  1. 最常見做法和想到的就是從1~n依次遍歷,然後遍歷每一個數字的每一位數,判斷其是不是等於1,累加return
  2. 這是介紹一種新的解法,類似找規律的樣子

在這裏插入圖片描述在這裏插入圖片描述

3. 題目代碼

public static int NumberOf1Between1AndN_Solution(int n) {
		int sum = 0;
		int hight = n / 10;
		int low = 0;
		int cur = n % 10;
		int dight = 1;
		// 4356
		while (hight != 0 || cur != 0) {
			if (cur == 0) {
				sum += dight * hight;
			} else if (cur == 1) {
				sum += dight * hight + low + 1;
			} else if (cur >= 2) {
				sum = sum + dight * (hight + 1);
			}
			low = low + cur * dight;
			cur = hight % 10; // 5
			dight = dight * 10; // 10
			hight = hight / 10; // 43
		}
		return sum;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章