C ++中具有相同连续差异的数字

假设我们必须找到所有长度为N的非负整数,以使每两个连续数字之间的绝对差为K。我们必须记住,答案中的每个数字除数字0本身外,都不得带有前导零。我们可以以任何顺序返回答案。因此,如果N = 3且K = 7,则输出将为[181,292,707,818,929],在这里我们可以看到070不是有效数字,因为它有一个前导零。

为了解决这个问题,我们将遵循以下步骤-

  • 创建一个称为dp的矩阵,其大小将为n + 1,将1到9填充到dp [1]中

  • 对于我,范围是1到N – 1

    • x:= dp [i,j]

    • lastNum:= x的最后一位

    • 位数:= lastNum + k

    • 如果数字在0到9的范围内,并且没有访问(x * 10 +数字),则

    • 位数:= lastNum – K

    • 如果数字在0到9的范围内,并且没有访问(x * 10 +数字),则

    • 将(10 * x +数字)插入dp [i + 1]

    • 将10 * x +数字插入访问数组

    • 将(10 * x +数字)插入dp [i + 1]

    • 将10 * x +数字插入访问数组

    • 定义一个称为Visited的集合

    • 对于范围从0到dp [i]的j

    • 如果N为1,则将0插入dp [N]

    • 返回dp [N]

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>

    using namespace std;

    void print_vector(vector<int> v){

       cout << "[";

       for(int i = 0; i<v.size(); i++){

          cout << v[i] << ", ";

       }

       cout << "]"<<endl;

    }

    class Solution {

       public:

       vector<int> numsSameConsecDiff(int N, int K) {

          vector <int> dp[N + 1];

          for(int i = 1; i <= 9; i++){

             dp[1].push_back(i);

          }

          for(int i = 1; i < N; i++){

             set <int> visited;

             for(int j = 0; j < dp[i].size(); j++){

                int x = dp[i][j];

                int lastNum = x % 10;

                int digit = lastNum + K;

                if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){

                   dp[i + 1].push_back(x * 10 + digit);

                   visited.insert(x * 10 + digit);

                }

                digit = lastNum - K;

                if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){

                   dp[i + 1].push_back(x * 10 + digit);

                   visited.insert(x * 10 + digit);

                }

             }

          }

          if(N == 1){

             dp[N].push_back(0);

          }

          return dp[N];

       }

    };

    main(){

       Solution ob;

       print_vector(ob.numsSameConsecDiff(3,7));

    }

    输入值

    3

    7

    输出结果

    [181,292,707,818,929]

    以上是 C ++中具有相同连续差异的数字 的全部内容, 来源链接: utcz.com/z/352568.html

    回到顶部