当前位置: 首页 > 编程笔记 >

在C ++中还原阵列

万俟光临
2023-03-14
本文向大家介绍在C ++中还原阵列,包括了在C ++中还原阵列的使用技巧和注意事项,需要的朋友参考一下

假设有一个用于打印数组A的数组元素的程序,但是该程序中存在一些错误。在该程序中,每个元素后面没有空格,因此,如果我们有一个打印的字符串,是否可以再次重新生成数组?我们知道数组元素的范围是1到k。

给定字符串s和整数k。我们必须找到多少种方法可以还原数组。答案可能非常大,因此以10 ^ 9 + 7为模返回。

因此,如果输入像S =“ 1318”并且k = 2000,那么输出将是8,因为我们可以形成8个不同的数组,例如[1318],[131,8],[13,18],[1,318 ],[1,3,18],[1,31,8],[13,1,8],[1,3,1,8]

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

  • const int m = 1e9 + 7

  • 定义一张映射dp

  • 定义一个函数add(),这将需要a,b,

  • return((a mod m)+(b mod m))mod m

  • 定义一个函数help(),它将使用idx,s,num,k,

  • 如果idx> = s的大小,则-

    • 返回1

  • 如果idx在dp中,而num在dp [idx]中,则-

    • 返回dp [idx,num]

  • ret:= 0

  • 如果num> = 1且num> = k并且s [idx]不等于'0',则-

    • ret:=添加(帮助(idx,s,0,k),ret)

  • 如果num * 10 +(s [idx]-'0')<= k,则-

    • ret:= add(help(idx + 1,s,num * 10 +(s [idx]-ASCII'0'),k),ret)

  • dp [idx,num]:= ret

  • 返回ret

  • 从主要方法中执行以下操作-

  • n:= s的大小

  • 定义大小为n + 1的数组ans

  • ans [0]:= 1

  • s:=在s之前连接一个空格

  • ks:=将k转换为字符串

  • 对于初始化i:= 1,当i <= n时,更新(将i增加1),-

    • 温度:= s [j] +温度

    • 如果s [j]与'0'相同,则-

    • 如果temp的大小> ks的大小,则-

    • val:= temp as number

    • 如果val> = 1且val <= k,则-

    • 忽略以下部分,跳至下一个迭代

    • 从循环中出来

    • ans [i]:= add(ans [i],ans [j-1])

    • 中位数:= 1

    • temp:=空字符串

    • 对于初始化j:= i,当j> = 1且cnt <= 10时,更新(将j减1),(将cnt加1),-

    • 返回ans [n]

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

    示例

    #include <bits/stdc++++.h>
    using namespace std;
    typedef long long int lli;
    const int m = 1e9 + 7;
    class Solution {
       public:
       unordered_map<int, unordered_map<lli, int> > dp;
       lli add(lli a, lli b){
          return ((a % m) + (b % m)) % m;
       }
       int help(int idx, string& s, lli num, int k){
          if (idx >= s.size())
          return 1;
          if (dp.count(idx) && dp[idx].count(num))
          return dp[idx][num];
          int ret = 0;
          if (num >= 1 && num <= k && s[idx] != '0') {
             ret = add(help(idx, s, 0, k), ret);
          }
          if (num * 10 + (s[idx] - '0') <= k) {
             ret = add(help(idx + 1, s, num * 10 + (s[idx] - '0'), k),
             ret);
          }
          return dp[idx][num] = ret;
       }
       int numberOfArrays(string s, int k){
          int n = s.size();
          vector<lli> ans(n + 1);
          ans[0] = 1;
          s = " " + s;
          string ks = to_string(k);
          for (lli i = 1; i <= n; i++) {
             lli cnt = 1;
             string temp = "";
             for (lli j = i; j >= 1 && cnt <= 10; j--, cnt++) {
                temp = s[j] + temp;
                if (s[j] == '0')
                   continue;
                if (temp.size() > ks.size())
                break;
                lli val = stol(temp);
                if (val >= 1 && val <= k) {
                   ans[i] = add(ans[i], ans[j - 1]);
                }
             }
          }
          return ans[n];
       }
    };
    main(){
       Solution ob;
       cout << (ob.numberOfArrays("1318",2000));
    }

    输入值

    "1318", 2000

    输出结果

    8
     类似资料:
    • 问题内容: 我正在尝试使用Microsoft.SqlServer.Management.Smo将数据库从一台服务器还原到另一台服务器。问题是我不断收到错误消息,指出它找不到.MDF文件。这样做的原因是,它试图从它来自的SQL实例名称的数据文件夹中找到它,而不是在另一个SQL实例的数据文件夹中寻找它。有没有一种方法可以告诉它要在哪个文件夹中搜索mdf,而不是假定它是标记到BAK文件的文件夹?真令人沮

    • “还原”功能会先删除数据库已选择的对象,然后根据你的备份创建新的对象。最后,插入数据。 还原一个备份到现有的数据库或模式 在主窗口中,打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击“还原备份”。 选择还原选项并点击“还原”。 还原一个备份到新的数据库或模式 创建并打开一个新的数据库或模式。 点击“备份”。 右击对象选项卡的任意位置并选择“还原备份从”。 浏览备份文

    • “还原”功能会先删除数据库已选择的对象,然后根据你的备份创建新的对象。最后,插入数据。 还原一个备份到现有的数据库或模式 在主窗口中,打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击 。 选择还原选项并点击“开始”。 还原一个备份到新的数据库或模式 创建并打开一个新的数据库或模式。 点击“备份”。 按住 Control 键并点按对象选项卡的任意位置,然后选择“还原备

    • “还原”功能会先删除数据库已选择的对象,然后根据你的备份创建新的对象。最后,插入数据。 还原一个备份到现有的数据库或模式 在主窗口中,打开一个数据库或模式。 点击“备份”并选择一个现有的备份文件。 在对象工具栏点击“还原备份”。 选择还原选项并点击“开始”。 还原一个备份到新的数据库或模式 创建并打开一个新的数据库或模式。 点击“备份”。 右击对象选项卡的任意位置并选择“还原备份从”。 浏览备份文

    • 本文向大家介绍C++实现矩阵原地转置算法,包括了C++实现矩阵原地转置算法的使用技巧和注意事项,需要的朋友参考一下 本文实例描述了C++实现矩阵原地转置算法,是一个非常经典的算法,相信对于学习C++算法的朋友有很大的帮助。具体如下: 一、问题描述 微软面试题:将一个MxN的矩阵存储在一个一维数组中,编程实现矩阵的转置。 要求:空间复杂度为O(1) 二、思路分析 下面以一个4x2的矩阵A={1,2,

    • 主要内容:BitArray 类中的属性,BitArray 类中的方法在 C# 中,BitArray 类用来管理一个紧凑型的位值数组,数组中的值均为布尔类型,其中 true(1)表示此位为开启,false(0)表示此位为关闭。 当您需要存储位(英文名“bit”数据存储的最小单位,也可称为比特),但事先又不知道具体位数时,就可以使用点阵列。当需要访问点阵列中的元素时,可以使用整型索引从点阵列中访问指定元素,索引从零开始。 BitArray 类中的属性 下表列出了 Bi