zoukankan      html  css  js  c++  java
  • 967. Numbers With Same Consecutive Differences

    Return all non-negative integers of length N such that the absolute difference between every two consecutive digits is K.

    Note that every number in the answer must not have leading zeros except for the number 0 itself. For example, 01 has one leading zero and is invalid, but 0 is valid.

    You may return the answer in any order.

    Example 1:

    Input: N = 3, K = 7
    Output: [181,292,707,818,929]
    Explanation: Note that 070 is not a valid number, because it has leading zeroes.
    

    Example 2:

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

    Note:

    1. 1 <= N <= 9
    2. 0 <= K <= 9
    class Solution {
        public int[] numsSameConsecDiff(int N, int K) {
            List<Integer> list = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
            
            for(int i = 2; i <= N; i++) {
                List<Integer> tmp = new ArrayList();
                for(int j : list) {
                    int x = j % 10;
                    if(j > 0 && x + K < 10) tmp.add(j * 10 + K + x);
                    if(j > 0 && K > 0 && x - K >= 0) tmp.add(j * 10 + x - K);
                }
                list = tmp;
            }
            int[] res = new int[list.size()];
            int i = 0;
            for(int j : list) res[i] =list.get(i++);
            return res;
        }
    }

    从要求出发,要求我们返回所有相邻位差为K的N位数。

    那我们可以从0-9出发,采用类似bfs的做法,在每一位上进行筛选然后进去下一位。

    具体筛选方法:既然要相邻位差,那我们先找到上一位最右侧的数(取模),然后±k看是否还符合要求(新生成的位≥0且<10),符合就添加到当前list中。每一位结束后更新一下list。

  • 相关阅读:
    Javascript本质第二篇:执行上下文
    Javascript本质第一篇:核心概念
    跨线程委托执行
    .NET中STAThread和MTAThread
    用管道实现流的分支
    Async和Await异步编程的原理
    在.NET中使用管道将输出流转换为输入流
    致木兄的一封信
    完整打造一个多功能音乐播放器项目(初步设想跟酷狗类似)
    新冠疫情下各大网站的变化
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13526352.html
Copyright © 2011-2022 走看看