967. 连续差相同的数字

题目
返回所有长度为 N 且满足其每两个连续位上的数字之间的差的绝对值为 K 的非负整数。

请注意,除了数字 0 本身之外,答案中的每个数字都不能有前导零。例如,01 因为有一个前导零,所以是无效的;但 0 是有效的。

你可以按任何顺序返回答案。

示例 1:

输入:N = 3, K = 7
输出:[181,292,707,818,929]
解释:注意,070 不是一个有效的数字,因为它有前导零。

示例 2:

输入:N = 2, K = 1
输出:[10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98]

提示:

1 <= N <= 9
0 <= K <= 9

【中等】
【分析】本题用循环迭代的方法,首先,当N=1时,无论K为何值,返回[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

当N>1时,首先确定如何来循环(举个栗子,如123,设1为第一位数):

  1. 循环第一位数:1~9
  2. 从第一位数开始循环依次得到后面的位数,这里确定循环位数 0 &lt; n ≤ N − 1 0&lt;n \leq N-1 0<nN1,因为这里第一位数已经得到,所以只需得到后面 N − 1 N-1 N1位数即可。
  3. 循环前一位数后面满足连续差K的数作为后一位数,通过第2步不断*10(因为是10进制数)得到最终符合题意的 N N N位数
class Solution:
    def numsSameConsecDiff(self, N, K):
        """
        :type N: int
        :type K: int
        :rtype: List[int]
        """
        
        if N==1:
            return(list(range(10)))
            
        dic={}
        for k in range(10):
            dic[k]=[v for v in range(10) if abs(v-k)==K]
        
        nums=[]
        for f in range(10):
            if f==0:
                continue     
            tmp_nums=[f]     #开始的那一位数
            for n in range(N-1):   #后面的N-1位数
                k_nums=[]
                while tmp_nums:
                   tmp_num=tmp_nums.pop(0) 
                   k=tmp_num%10
                   values=dic[k]
                   for v in values:
                       k_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值