给定正整数N ,任务是通过更改数字,将该整数转换为最小可能的整数,且不使用前导零。如果X + Y = 9,则只能将数字X更改为数字Y。
例子:
Input: N = 589
Output: 410
Change 5 -> 4, 8 -> 1 and 9 -> 0
Input: N = 934
Output: 934
934 cannot be minimised.
方法:仅需要更改大于或等于5的数字,因为更改小于5的数字将导致更大的数字。在所有必需的数字都更新之后,检查结果数字是否带有前导零,如果是,则将其更改为9 。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the minimum possible
// integer that can be obtained from the
// given integer after performing
// the given operations
string minInt(string str)
{
// For every digit
for (int i = 0; i < str.length(); i++) {
// Digits less than 5 need not to be
// changed as changing them will
// lead to a larger number
if (str[i] >= '5') {
str[i] = ('9' - str[i]) + '0';
}
}
// The resulting integer
// cannot have leading zero
if (str[0] == '0')
str[0] = '9';
return str;
}
// Driver code
int main()
{
string str = "589";
cout << minInt(str);
return 0;
}
Java
// Java implementation of the approach
// Function to return the minimum possible
// integer that can be obtained from the
// given integer after performing
// the given operations
import java.util.*;
class GFG{
static String minInt(String str)
{
// For every digit
String s = "";
for (int i = 0; i < str.length(); i++)
{
// Digits less than 5 need not to be
// changed as changing them will
// lead to a larger number
if (str.charAt(i) >= '5')
{
s += (char)(('9' - str.charAt(i)) + '0');
}
else
{
s += str.charAt(i);
}
}
// The resulting integer
// cannot have leading zero
if (str.charAt(0) == '0')
s += '9';
return s;
}
// Driver code
public static void main(String []args)
{
String str = "589";
System.out.println(minInt(str));
}
}
// This code is contributed by Surendra_Gangwar
Python3
# Python3 implementation of the approach
# Function to return the minimum possible
# integer that can be obtained from the
# given integer after performing
# the given operations
def minInt(str1):
# For every digit
for i in range(len(str1)):
# Digits less than 5 need not to be
# changed as changing them will
# lead to a larger number
if (str1[i] >= 5):
str1[i] = (9 - str1[i])
# The resulting integer
# cannot have leading zero
if (str1[0] == 0):
str1[0] = 9
temp = ""
for i in str1:
temp += str(i)
return temp
# Driver code
str1 = "589"
str1 = [int(i) for i in str1]
print(minInt(str1))
# This code is contributed by Mohit Kumar
C#
// C# implementation of the above approach
using System;
class GFG
{
// Function to return the minimum possible
// integer that can be obtained from the
// given integer after performing
// the given operations
static string minInt(char []str)
{
// For every digit
for (int i = 0; i < str.Length; i++)
{
// Digits less than 5 need not to be
// changed as changing them will
// lead to a larger number
if ((int)str[i] >= (int)('5'))
{
str[i] = (char)(((int)('9') -
(int)(str[i])) +
(int)('0'));
}
}
// The resulting integer
// cannot have leading zero
if (str[0] == '0')
str[0] = '9';
string s = new string(str);
return s;
}
// Driver code
static public void Main ()
{
string str = "589";
Console.WriteLine(minInt(str.ToCharArray()));
}
}
// This code is contributed by AnkitRai01
输出:
410