找到通过插入给定数字形成的最小数字

找到通过插入给定数字形成的最小数字

在给定的数字插入一个数字意味着在给定的数字中添加一个新的数字,可以是在数字的前面、后面或者中间。我们已经给出了一个数字和一个数字,并且必须以尽可能小的方式将该数字添加到数字中。为了方便插入操作,我们将把数字转换为字符串。此外,给定的数字也可以是负数,因此我们必须考虑这种情况。

示例示例

Input1

的中文翻译为:

输入1

Given number: 124Given digit: 3Output: 1234 

Explanation − 我们有四个地方可以添加给定的数字,结果可以是3124、1324、1234、1243。在这四个中,倒数第二个是最小的。

Input2

的中文翻译为:

输入2

Given number: -124Given digit: 3Output: -3124 

Explanation − 我们有四个地方可以添加给定的数字,结果可以是-3124,-1324,-1234,-1243。在这四个中,第一个是最小的。

Naive Approach

的中文翻译为:

天真的方法

我们现在已经看过了示例,接下来让我们看一下我们将执行的解决问题的步骤 –

首先,我们将检查当前数字是正数还是负数。

如果当前数字为负数,我们将将其标记为负数变量,并将当前数字设为正数。

之后,我们将把当前的数字转换为字符串,并根据当前数字的正负调用函数basis。

在这些函数中,我们将尝试在每个位置上适配数字,并根据正数或负数来检查当前数字是较小还是较大。

如果当前数字是正数,我们将尝试找到最小的数字并返回。

否则,我们将找到最大的数字,并通过乘以-1来返回它。

Example

的中文翻译为:

示例

#include using namespace std;int findMin(string str, int d){   string ans = str + to_string(d); // variable to store the answer        // traversing over the string    for(int i=0; i<= str.size(); i++){      ans = min(ans, str.substr(0,i) + to_string(d) + str.substr(i));   }   return stoi(ans);}int findMax(string str, int d){   string ans = str + to_string(d); // variable to store the answer        // traversing over the string    for(int i=0; i<= str.size(); i++){      ans = max(ans, str.substr(0,i) + to_string(d) + str.substr(i));   }   return stoi(ans);}int minimumNumber(int n, int d){   // checking for the negative number    int isNeg = 1;       if(n < 0){      n *= -1;      isNeg = -1;   }       // converting the current number to string    string str = to_string(n);       if(isNeg == 1){      return findMin(str,d);   }   else{      return -1*findMax(str,d);   }}int main(){   int n = -124; // given number    int d = 3; // given digit        // calling to the function    n = minimumNumber(n, d);       cout<<"The minimum number after adding the new digit is "<<n<<endl;   return 0;}

输出

The minimum number after adding the new digit is -3124

时间和空间复杂度

上述代码的时间复杂度为O(N*N),其中N是给定数字的位数。

上述代码的空间复杂度为O(N),其中N是给定数字的位数。

高效的方法

在之前的方法中,我们一直在检查每个数字,找到比给定数字大的第一个数字,然后将其添加并返回自身,这是一种高效的方法。对于负数,找到比它小的数字,并将其添加并返回。

让我们看看代码−

Example

的中文翻译为:

示例

#include using namespace std;int findMin(string str, int d){   // traversing over the string    for(int i=0; i d){         return stoi(str.substr(0,i) + to_string(d) + str.substr(i));      }   }   return stoi(str + to_string(d));}int findMax(string str, int d){   // traversing over the string    for(int i=0; i<= str.size(); i++){      if(str[i]-'0' < d){         return stoi(str.substr(0,i) + to_string(d) + str.substr(i));      }   }   return stoi(str + to_string(d));}int minimumNumber(int n, int d){   // checking for the negative number    int isNeg = 1;   if(n < 0){      n *= -1;      isNeg = -1;   }      // converting the current number to string    string str = to_string(n);       if(isNeg == 1){      return findMin(str,d);   }   else{      return -1*findMax(str,d);   }}int main(){   int n = 124; // given number    int d = 3; // given digit        // calling to the function    n = minimumNumber(n, d);       cout<<"The minimum number after adding the new digit is "<<n<<endl;   return 0;}

输出

The minimum number after adding the new digit is 1234

时间和空间复杂度

上述代码的时间复杂度为O(N),其中N是给定数字的位数。

上述代码的空间复杂度为O(N),其中N是给定数字的位数。

结论

在本教程中,我们实现了一种在给定数字中插入数字的方法,即在给定数字的前面、后面或数字之间添加一个新的给定数字。我们看到了两种方法,一种时间复杂度为O(N*N),另一种为O(N)。这两种方法的空间复杂度都是O(N)。

以上就是找到通过插入给定数字形成的最小数字的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:47:49
下一篇 2025年12月17日 21:47:56

相关推荐

  • 打印给定数字的乘法表在C中

    程序描述 打印给定数字的乘法表 算法 接受用户提供的任何需要形成乘法的数字 从 I 的值开始乘以给定数 (=1) 将给定数与 I 的值递增,直到 I 值小于或等于12. 示例 /* Program to print the multiplication table of a given number…

    2025年12月17日
    000
  • C程序在数组中找到最小和最大的质数

    问题陈述 给定一个包含 n 个正整数的数组。我们必须找到素数具有最小值和最大值的数字。 如果给定的数组是 – arr [] = {10, 4, 1, 12, 13, 7, 6, 2, 27, 33}then minimum prime number is 2 and maximum pr…

    2025年12月17日
    000
  • 给定一个数字,编写一个C程序来找到斐波那契数列

    斐波那契数列是通过将前两个数字相加得到的一系列数字。 斐波那契数列从两个数字f0和f1开始。 fo和f1的初始值可以取0、1或1、1。 Fibonacci序列满足以下条件: fn = fn-1 + fn-2 算法 参考Fibonacci序列的算法。 STARTStep 1: Read integer…

    2025年12月17日
    000
  • 可憎的数字

    如果一个数字在其二进制展开中有奇数个1,则被认为是奇异数。前10个奇异数是1,2,4,7,10,11,13,14,16,19,21。有趣的是,所有2的幂都是奇异数,因为它们只有1个位被设置。 下面的文章详细讨论了两种判断一个数字是否为可恶数字的方法。 问题陈述 这个问题的目的是检查给定的数字是否是一…

    2025年12月17日
    000
  • 用C++将一个数字表示为最大可能数量的质数之和

    讨论一个问题,例如,给定一个数字 N,我们需要将该数字拆分为最大素数和 Input: N = 7Output: 2 2 3Explanation: 7 can be represented as the sum of two 2’s and a 3 which are the maxim…

    2025年12月17日
    000
  • 使用C++编写代码,找到第N个非平方数

    我们都知道不是任何数字的平方的数字,如 2、3、5、7、8 等。非平方数有 N 个,不可能知道每个数字。因此,在本文中,我们将解释有关无平方数或非平方数的所有内容,以及在 C++ 中查找第 N 个非平方数的方法。 第 N 个非平方数 如果一个数是整数的平方,则该数被称为完全平方数。完全平方数的一些例…

    2025年12月17日
    000
  • C++程序:找到具有相同左右旋转的数字的最长子序列

    在这个问题中,我们需要找到左右旋转相同的子序列的最大长度。左旋转是指将字符串中的所有字符向左移动,并将末尾的第一个字符移动。右旋转意味着将所有字符串字符向右移动,并将最后一个字符移动到开头。 问题陈述 – 我们给定了包含数字的字符串str,需要找到左右旋转相同的最大长度的子序列。 示例 输入-str…

    2025年12月17日
    000
  • 将一个以链表表示的数字加1

    数字的链表表示是这样提供的:链表的所有节点都被视为数字的一位数字。节点存储数字,使得链表的第一个元素保存数字的最高有效位,链表的最后一个元素保存数字的最低有效位。例如,数字 202345 在链表中表示为 (2->0->2->3->4->5)。 要向这个表示数字的链表添加…

    2025年12月17日
    000
  • 数组元素的绝对差值之和最小的是哪一个?

    在这里,我们将看到一个有趣的问题。我们有一个包含N个元素的数组’a’。我们需要找到一个元素x,使得|a[0] – x| + |a[1] – x| + … + |a[n-1] – x|的值最小化。然后我们需要找到最小化的和。 假设…

    2025年12月17日
    000
  • 检查一个数字是否为回文的Bash程序?

    要检查一个数字是否是回文数,我们需要将该数字反转,然后如果原始数字和反转后的数字相同,则为回文数。在Bash中,执行反转操作非常简单。我们需要使用‘rev’命令来实现。让我们看一下程序以更清楚地理解。 示例 #!/bin/bash# GNU bash Scriptn=12321rev=$(echo …

    2025年12月17日
    000
  • 将数组表示的数字加1(递归方法)

    给定一个数组,该数组是由非负数字表示的数字的集合,将数字加1(增加由数字表示的数字)。数字存储方式是最高位数字是数组的第一个元素。 要将数字加1到由数字表示的数字 从数组末尾开始,加法意味着将最后一个数字4舍入为5。 如果最后一个元素是9,则将其变为0并进位=1。 对于下一次迭代,检查进位,如果加到…

    2025年12月17日
    000
  • 打印N行数字,使得每对数字之间的最大公约数为K

    gcd gcd代表两个或多个整数的最大公约数,不包括0 例如,要找到48和180的最大公约数 48 = 2 × 2 × 2 × 2 × 3 180 = 2 × 2 × 3 × 3 × 5 最大公约数 = 2 × 2 × 3 = 12。 在给定的问题中,应打印N行,其中元素具有指定的最大公约数 Inp…

    2025年12月17日
    000
  • 在C语言中,不使用循环、递归和宏展开的情况下,打印一个数字100次

    在本节中,我们将看到如何在C语言中打印一个数字100次。有一些限制条件。我们不能使用循环、递归或宏展开。 为了解决这个问题,我们将使用C语言中的setjump和longjump。setjump()和longjump()位于setjmp.h库中。这两个函数的语法如下所示。 示例 #include #i…

    2025年12月17日
    000
  • C程序以X形式显示数字

    参考下面的算法,编写C程序以显示X形状的数字。 算法 Step 1: StartStep 2: Declare variablesStep 3: Read number of rowsStep 4: for loop satisfiesif(i==j || i+j==rows-1)print i+1…

    2025年12月17日
    000
  • C++程序以找到使数字为0所需的最少操作次数

    假设我们有一个包含 n 位数字的数字字符串 S。假设 S 代表一个数字时钟,整个字符串显示从 0 到 10^n – 1 的整数。如果位数较少,则会显示前导 0。按照以下操作 – 将时钟上的数字减 1,或 交换两位数字 p> 我们希望时钟能够以最少的操作次数显示 0。我们…

    2025年12月17日
    000
  • 输入一个字符,如何判断是字母,数字还是特殊字符

    输入一个字符,如何判断是字母,数字还是特殊字符 方法如下: 1、使用格式符%c获得输入的字符; 2、判断该字符在ascii码表中的位置即可。 #include int main(){ char ch; printf(“请输入一个字符”); scanf(“%c”,&ch); if(ch &gt…

    2025年12月17日
    000
  • C# 判断字符串是否可以转化为数字

    c#  判断字符串是否可以转化为数字  /// /// 判断字符串是否可以转化为数字 /// /// 要检查的字符串 /// true:可以转换为数字;false:不是数字 public static bool IsNumberic(string str) { double vsNum; bool …

    好文分享 2025年12月17日
    000
  • python如何判断一个字符串是否全是数字_python isdigit()等方法判断字符串是否为纯数字

    判断字符串是否为纯数字可通过isdigit()、isnumeric()、isdecimal()和正则表达式实现;其中isdigit()适用于ASCII数字,isnumeric()支持更广的数字类型,isdecimal()仅限十进制,正则^d+$可灵活匹配但性能较低;含符号或小数可用float()转换…

    2025年12月14日
    000
  • Python程序找到第一个和最后一个数字的和

    在本文中,给定的任务是将整数的第一个数字和最后一个数字相加。现在整数可以非常小,也可以很大。因此,这些计划将分为两部分。首先,我们需要找到这个整数有多大,然后从中得到第一个数字。第二部分是从给定的整数中获取最后一个数字,这可以通过将数字除以十并找到余数来轻松完成。在这篇 Python 文章中,使用四…

    2025年12月13日
    000
  • 币圈免费行情查询网站推荐_最新免费数字货币行情网站大全

    对于数字货币投资者而言,实时、准确的行情数据是做出明智决策的关键。本文精选了市场上广受好评的免费行情查询网站,它们不仅提供基础的价格信息,还集成了强大的图表工具和市场分析功能,帮助您轻松掌握市场动态。 1. 币安 (Binance) 作为全球领先的数字资产交易所,币安不仅提供交易服务,其行情页面本身…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信