[Swift]LeetCode233. 数字1的个数 | Number of Digit One

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

Example:

Input: 13
Output: 6
Explanation: Digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.


给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

示例:

输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。

8ms
 1 class Solution {
 2     func countDigitOne(_ n: Int) -> Int {
 3         var     n = n
 4         var  rest = 0
 5         var  base = 1
 6         var count = 0
 7
 8         while n > 0 {
 9             let digit = n % 10
10             n = n/10
11             count += n * base
12             switch digit {
13                 case 0: ()
14                 case 1: count += rest + 1
15                 default: count += base
16             }
17             rest = digit * base + rest
18             base *= 10
19         }
20         return count
21     }
22 }


8ms

 1 class Solution {
 2     func countDigitOne(_ n: Int) -> Int {
 3         var num = n
 4         var res = 0
 5         var multiply = 1
 6         var remainder = 0
 7         while num > 0 {
 8             let val = num % 10
 9
10             if val <= 1 {
11                 res += (num / 10) * multiply
12                 if val == 1 {
13                     res += remainder + 1
14                 }
15             }
16             else {
17                 res += (num / 10 + 1) * multiply
18             }
19
20             multiply *= 10
21             remainder = n % multiply
22             num /= 10
23         }
24
25         return res
26     }
27 }


12ms

 1 class Solution {
 2     func countDigitOne(_ n: Int) -> Int {
 3         if n <= 0 { return 0 }
 4
 5         let digitCount = Int(log2(Double(n))/log2(10))+1
 6         var count = 0
 7         for i in 0..<digitCount {
 8             let base = Int(pow(10, Double(i)))
 9             let nextBase = base * 10
10             let currentDigit = n/base % 10
11
12             count += (n/nextBase) * base
13
14             if currentDigit == 0 {
15                 count += 0
16             } else if currentDigit == 1 {
17                 count += n % base + 1
18             } else {
19                 count += base
20             }
21         }
22         return count
23     }
24 }


36ms

 1 class Solution {
 2     func countDigitOne(_ n: Int) -> Int {
 3         if n <= 0 {
 4             return 0
 5         }
 6
 7         if n < 10 {
 8             return 1
 9         }
10
11         var m = n
12         var l = 0
13         var c = 1
14         while m != 0 {
15             l = m % 10
16             m /= 10
17             c *= 10
18         }
19         c /= 10
20         let k = l * c
21
22         if l == 1 {
23             return n - k + 1 + countDigitOne(n-k) + countDigitOne(c-1)
24         }else {
25             return countDigitOne(2 * c - 1) + (l - 2)*countDigitOne(c-1) + countDigitOne(n-k)
26         }
27     }
28 }

原文地址:https://www.cnblogs.com/strengthen/p/10204847.html

时间: 2024-10-07 16:24:21

[Swift]LeetCode233. 数字1的个数 | Number of Digit One的相关文章

[Swift]LeetCode191. 位1的个数 | Number of 1 Bits

Write a function that takes an unsigned integer and return the number of '1' bits it has (also known as the Hamming weight). Example 1: Input: 00000000000000000000000000001011 Output: 3 Explanation: The input binary string 000000000000000000000000000

数字统计(LeetCode Number of digit One)

1.      一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或 006.数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9. 思路:对于n位数,例如3位数,000-999,出现0,1,2...9的次数相同,记每个数字出现的次数为avg,这10个数字出现的总次数为sum=10*avg. 而n位数共有10^n个数,每个具体的数对于sum的贡献为n次. 得到:1

[LeetCode] Number of Digit One 数字1的个数

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n. For example: Given n = 13, Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13. Hint: Beware of overflow.

LeetCode OJ 之 Number of Digit One (数字1的个数)

题目: Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n. For example: Given n = 13, Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13. 思路: 对这个数字的每一位求存在1的数字的

[LeetCode]67. Number of Digit One1的个数和

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n. For example:Given n = 13,Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13. Hint: Beware of overflow. S

课堂练习——找十进制数中数字1的个数

题目要求: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5. 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 一.解决思路 通过列举几个数进行计算,可以发现函数f(N)规律如下: 1.一位十进制数:当N>=1时,f(N)=1:当N=0时,f(N)= 0; 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6

题目1156:谁是你的潜在朋友(统计某个数字出现的个数)

题目描述: “臭味相投”——这是我们描述朋友时喜欢用的词汇.两个人是朋友通常意味着他们存在着许多共同的兴趣.然而作为一个宅男,你发现自己与他人相互了解的机会并不太多.幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友.    首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M.同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友.你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友

数字量化值Digital Number, 辐射亮度Radiance, 反射率Reflectance,发射率Emissive

我们经常听到有人困惑于图像的像素值储存的是什么信息,以及如何获取所需的值.这里我们总结以下几个概念. 数字量化值(Digital Number :DN) 像素值的通用术语是数字量化值或DN值,它通常被用来描述还没有校准到具有意义单位的像素值. 如果你只是想看一个图像,和不打算解释像素值的物理意义,那么就可以以DN值的方式来保存. 辐射率(Radiance) 通常叫辐射亮度值(radiance pixel values),是某一个面积辐射能量的总和.辐射亮度值有单位标识,如W/cm2.μm.sr(

【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 第一,首先想到额就是在VUX-UI中制定type=number.--不可行 VUX中的文档和代码说明,type=number不支持maxLength,会报错,而且没有正则替换的处理或者钩子函数,只有输入后提示校验信息. 第二,基于VUX中XInput封装,有如下问题 1)两层v-model,正则替换的值不会触发input框渲染 解决:currentV