题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
import Foundation
class For12Solution {
func printMax(_ n: Int) {
var nums = Array(repeating: "0", count: n)
while !incrementNumber(&nums) {
print(printPreString(nums.joined()))
}
}
func incrementNumber(_ nums: inout [String]) -> Bool {
var isOverFlow = false
var carry = 0
var sum = 0
for index in (0..<nums.count).reversed() {
sum = Int(nums[index])! + carry
if index == nums.count - 1 {
sum += 1
}
if sum >= 10 {
if index == 0 {
isOverFlow = true
}else {
sum -= 10
carry = 1
nums[index] = "0"
}
}else {
nums[index] = String(sum)
break;
}
}
return isOverFlow
}
func printPreString(_ nums: String) -> String {
var index = 0
for r in nums {
if r != "0" {
break
}
index += 1
}
return String(nums[nums.index(nums.startIndex, offsetBy: index)...])
}
}
算法思想:由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 char 数组进行存储。使用回溯法得到所有的数。
github地址:https://github.com/cubegao/LeetCode