LeetCode-python 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]

解题思路


如果N=1,返回0到9
如果N>1, 第一位数可以是1到9,一位一位增加,下一位可以是当前位-K或者当前位+K,只要在0到9之间即可

代码实现

方法1

class Solution(object):
    def numsSameConsecDiff(self, N, K):
        """
        :type N: int
        :type K: int
        :rtype: List[int]
        """
        if N==1:
            return list(range(10))
        res = list(map(str,range(1, 10)))
        for i in range(N-1):
            t = []
            for x in res:
                a = int(x[-1])
                if a-K>=0:
                    t.append(x+str(a-K))
                if a+K<=9 and K!=0:
                    t.append(x+str(a+K))
            res = t
        return [int(i) for i in res]
                

方法2:

class Solution(object):
    def numsSameConsecDiff(self, N, K):
        """
        :type N: int
        :type K: int
        :rtype: List[int]
        """
        cur = range(10)
        for i in range(N - 1):
            cur = [x * 10 + y for x in cur for y in set([x % 10 + K, x % 10 - K]) if x and 0 <= y < 10]
        return cur

本文链接://www.greatytc.com/p/c1b32934f6e6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,289评论 6 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,434评论 0 2
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,522评论 0 5
  • 选择无处不在,小到今天我们吃点什么,大到在一些关键时刻的决策。我们的人生,就是一次又一次选择的结果…… 生存还是毁...
    娜蛋糕阅读 224评论 0 0
  • 每日更新第1年第34天! 因为做软件开发的缘故,一直想着怎么做才能更好, 就参加【365日更营】营主妮妮组织的【梁...
    李奕灿阅读 739评论 0 1