66. 加一(剪枝)

def plusOne(digits):
# part 1
    n = len(digits)
    num = 0
    for i in range(n):
        num += digits[i] * pow(10, (n-1-i))
    num += 1
# 目前已经得到加一后的数,下面要把它变成列表
# part 2
    j = 0
    new = []
    while num > 0:
        yushu = num % 10
        new.append(yushu)
        num = num // 10
    new = new[::-1]
    return new

part 2 可以用一句话实现,见下方# *****

def plusOne(digits):
    n = len(digits)
    num = 0
    for i in digits:
        num = num * 10 + i
#    for i in range(n):
#        num += digits[i] * pow(10, (n-1-i))
    num += 1
# ******
    num = str(num)
    return [int(j) for j in num]
  1. 一次遍历 剪枝算法
    两种情况:
    一、尾数不是9,那么只有尾数会+1
    二、尾数是九,那么不止尾数会+1
    如129 -> 130,2 和 9 都要+1
    999 -> 1000, 999 三个 9 都要+1
    剪枝算法是裁剪搜索树中没有意义的,不需要搜索的树枝,以提高运算速度。
    这里剪枝则是裁剪掉原列表中不需要加1的数。
    如:
    327 -> 328,只有7要 +1,3和 2 就可以被裁剪掉
    129 -> 130,2 和 9 都要+1,首位 1 就可以被裁剪掉
    999 -> 1000, 999 三个 9 都要+1,就没有裁剪的地方
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        ad = 1
        for i in range(n-1, -1, -1):
            # 剪枝
            if ad == 0:
                break
            # add_num 为加一后的数字,可为1-10
            add_num = digits[i] + ad
            # digits该位置的原数被替换成新的
            digits[i] = add_num % 10
            # 如果该数有进位, ad变为1, 如果不进位, ad为0
            ad = add_num // 10
            # 进位(如 99 变 100)
            if i == 0 and add_num == 10:
                digits = [1] + digits
                break
        return digits
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0. 引言 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习:给定一个数据集,其中的每...
    Liopisces阅读 10,441评论 2 2
  • 15.1基本概念 规则学习是从训练数据中学习一组能用于对未见示例进行判别的规则。 规则可分为两类:命题规则和一阶规...
    一杭oneline阅读 6,185评论 2 0
  • 《六项精进》打卡第二十六天 日期:2017.10.20 姓名:黄晓明 在日本 单位:温州市博奕成套设备工程有限...
    黄晓明_f18e阅读 1,033评论 0 0
  • 近期在工作中使用远程桌面访问另一台工控机执行一个串口数据采集程序,竟无法获取到串口数据,关闭远程桌面,直接操作其...
    默然添乱阅读 6,826评论 0 0
  • 春天来了,名叫蔷薇花的女人最喜欢院子里的小葱和生菜,一般她还是蘸甜面酱吃,苦辣咸综合,吃起来格外带劲,这样的女人在...
    月满钟秀阅读 1,872评论 0 3