★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10519845.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a non-negative integer N
, find the largest number that is less than or equal to N
with monotone increasing digits.
(Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits x
and y
satisfy x <= y
.)
Example 1:
Input: N = 10 Output: 9
Example 2:
Input: N = 1234 Output: 1234
Example 3:
Input: N = 332 Output: 299
Note: N
is an integer in the range [0, 10^9]
.
给定一个非负整数 N
,找出小于或等于 N
的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。)
示例 1:
输入: N = 10 输出: 9
示例 2:
输入: N = 1234 输出: 1234
示例 3:
输入: N = 332 输出: 299
说明: N
是在 [0, 10^9]
范围内的一个整数。
1 class Solution { 2 func monotoneIncreasingDigits(_ N: Int) -> Int { 3 var str:String = String(N) 4 var arrInt:[Int] = Array(str).map{$0.ascii} 5 var n:Int = str.count 6 var j:Int = n 7 for i in stride(from:n - 1,to:0,by:-1) 8 { 9 if arrInt[i] >= arrInt[i - 1] 10 { 11 continue 12 } 13 arrInt[i - 1] -= 1 14 j = i 15 } 16 for i in j..<n 17 { 18 arrInt[i] = 57 19 } 20 var arrChar:[Character] = arrInt.map{$0.ASCII} 21 return Int(String(arrChar)) ?? 0 22 } 23 } 24 25 //Character扩展 26 extension Character 27 { 28 //Character转ASCII整数值(定义小写为整数值) 29 var ascii: Int { 30 get { 31 return Int(self.unicodeScalars.first?.value ?? 0) 32 } 33 } 34 } 35 36 //Int扩展 37 extension Int 38 { 39 //Int转Character,ASCII值(定义大写为字符值) 40 var ASCII:Character 41 { 42 get {return Character(UnicodeScalar(self)!)} 43 } 44 }