今天下午創業教育課上無聊,想起來一道微軟的面試題,即求1~n中1出現的次數
例如n=11 則1一共出現4次:1 10 11
這個問題我仔細思考了一陣,推出了乙個很快的解法(複雜度lg(n))...寫在blog上儲存
思路: 首先確定個位1的個數,再統計十位1的個數,.....統計最高位1的個數全部累加即為所求.
設n=497 則過程如下:
個位1數:
由於497中的"49"是由於個位進製得到的,不難想出個位一共進了49位,每次進製個位出現乙個1,因此個位1的個數等於490/10+剩下'7'包含1個個數共計490/10+1=50個
十位1數:
不難想到497中十位以上的數字全部是由十位的進製產生的,因此十位共進製400/100=4次,而十位每 個1又包含著個位的10個數字,因此497中十位出現1的個數為 400/100 x 10 +10=50次
百位1數:由於百位為最高位,而且百位數字大於1,因此百位包含1個數為100個...
累加得到n=497時 1的總個數為50+50+100=200個.....
基於上面的思路,可以得到乙個複雜度為lg(n)的演算法..... 實現如下:
求1 n整數中1出現的次數
自己不會,看看大神的解法,自己總結一下下,有更好的思路,望指教!解題思路 將數字進行拆分,分為三部分,高位,低位,和當前位 以求十位出現1的次數為例,digit 10 1.以n 1202為例,此時,高位high 12,低位low 2,當前位cur 0 此時十位出現1 的數字的範圍是 0010 111...
1 n中1出現的次數
輸入乙個整數 n 求1 n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1 12這些整數中包含1 的數字有1 10 11和12,1一共出現了5次。示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 6 解析需要通過找規律來分析。假設我們對5014這個數字求解。1 個位上1出...
1 n整數中1出現的次數
示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 62.1 思路分析 題目要求1 n中1出現的次數,考慮將n轉換為字串,然後統計字元1的個數,但這樣會超時 既然1不行,換一種思路,將n轉換為字串後,可以容易確定n的位數 利用for迴圈,從個位開始直到最高位,計算每一位上1出現的次數...