From 63741dd9dc7c28714493b6702bd0c89b2f6f5786 Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Fri, 10 Jul 2020 22:50:45 +0800 Subject: [PATCH] fix typo --- solutions/233. Number of Digit One.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solutions/233. Number of Digit One.md b/solutions/233. Number of Digit One.md index 4ac76d0..9e784f8 100644 --- a/solutions/233. Number of Digit One.md +++ b/solutions/233. Number of Digit One.md @@ -8,7 +8,7 @@ 比较好想的是递归法,核心思想就是每次去掉最高位。 * 递归出口:当`n < 1`时直接返回0; * 否则我们假设n表示成"aB"的形式,其中a代表n的最高位,B代表其余位,例如若 n = 2345 则a=2,B=345。我们还令M为与n位数相同的最小的数,即若 n=2345 则 M = 1000。所以很明显我们有等式`n = a * M + B`。 - * 先考虑出现在最高位的1的个数。所以这里需要考虑a是否为1,若是则有B+1个否则有M个;例如若n = 1234那么千位的1就有235个(即1000~1234),若n = 2234则有1000个(即1000~1999)。 + * 先考虑出现在最高位的1的个数。所以这里需要考虑a是否为1,若是则有B+1个否则有M个;例如若n = 1234那么千位的1就有235个(即1000至1234),若n = 2234则有1000个(即1000至1999)。 * 再考虑非最高位的1的个数。0到`a*M`中出现在非最高位的1的个数为`a*countDigitOne(M-1)`,例如0~3000中出现在非最高位(即个十百位)的1的个数为`3*countDigitOne(999)`;`a*M+1`到`a*M+B`中出现在非最高位的1的个数为`a*countDigitOne(B)`,例如3001到3421中出现在非最高位(即个十百位)的1的个数为`countDigitOne(421)`。 * 综上,总的1的个数为`a * countDigitOne(M - 1) + countDigitOne(B) + (a == 1 ? B + 1 : M)`。 @@ -25,7 +25,7 @@ * 此时a的个位的值有三种情况: * a的个位大于1。例如 n = 31456,则 a = 314,a的个位是4。此时1-n的百位是1的次数为:`32*100`(即形为A1B,A为0-31,B为0-99); * a的个位等于1。即n的百位是1,例如 n = 31156,则 a = 311。此时0-n的百位是1的次数为:`31*100 + 56 + 1`(即形为A1B,A为0-30,B为0-99;或者311C,C为0到56); - * a的个位等于0。即n的百位是1,例如 n = 31056,则 a = 310。此时0-n的百位是1的次数为:`31*100`(即形为A1B,A为0-30,B为0-99); + * a的个位等于0。即n的百位是0,例如 n = 31056,则 a = 310。此时0-n的百位是1的次数为:`31*100`(即形为A1B,A为0-30,B为0-99); |n的百位| 0到n的百位是1的次数 | n举例 | a | b | 0到n的百位是1的次数 | |--- | --- | --- | --- | --- | --- | @@ -81,4 +81,4 @@ public: return ones; } }; -``` \ No newline at end of file +```