Leetcode 967:连续差相同的数字(超详细的解法!!!)

版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/85852347

返回所有长度为 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. 1 <= N <= 9
  2. 0 <= K <= 9

解题思路

这个问题非常简单,直接按照题目意思来就可以,不过有几个陷阱需要注意。首先我们知道当N==1的时候,无论K是多少,我们返回的结果都是[0,1,2,3,4,5,6,7,8,9]。然后我们就可以通过判断,先将最高位的数添加到结果中去,判断方式也非常简单

  • i + K &lt; 10 i+K&lt;10
  • i + K &gt; = 0 i+K&gt;=0

接着通过同样的方式去添加其他位的数字。最后还有个陷阱就是K=0,对于这种情况,我们要避免重复添加元素(因为我们是通过i+Ki-K去添加元素的),最简单的方式就是通过set

class Solution:
    def numsSameConsecDiff(self, N, K):
        """
        :type N: int
        :type K: int
        :rtype: List[int]
        """
        if N == 1:
            return list(range(10))
        
        res = list()
        for i in range(1, 10):
            if i + K < 10 or i - K >= 0:
                res.append(i)

        for i in range(1, N):
            tmp_res = list()
            while res:
                num = res.pop(0)
                num_s = num % 10
                if num_s + K < 10:
                    tmp_res.append(num*10 + num_s + K)
                    
                if num_s - K >= 0:
                    tmp_res.append(num*10 + num_s - K)   
            res = tmp_res
            
        return list(set(res))

更加简洁的写法。

class Solution:
    def numsSameConsecDiff(self, N, K):
        """
        :type N: int
        :type K: int
        :rtype: List[int]
        """
        if N == 1:
            return list(range(10))
        
        res = list(range(1, 10))
        for _ in range(1, N):
            tmp_res = list()
            for num in res:
                num_s = num % 10
                for i in {num_s - K, num_s + K}:
                    if 0 <= i <= 9:
                        tmp_res.append(num * 10 + i)
            res = tmp_res
            
        return res

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/85852347