Swift.打印1到最大的n位数

cubegao 2015-07-07 PM 404℃ 0条
题目描述:输入数字 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

标签: 算法

非特殊说明,本博所有文章均为博主原创。

评论啦~