给定一个整数N ,任务是通过反转N 的一些数字来形成一个最小可能的正数 (>0)。
Inverting for a digit T is defined as subtracting it from 9 that is 9 – T.
注意:最终数字不应从零开始。
例子:
Input:N = 4545
Output: 4444
Explanation:
The minimum possible number is 4444 by subtracting the two 5 ( 9 – 5 = 4)
Input: N = 9000
Output: 9000
Explanation:
The minimum possible number is 9000 cause the number has to be > 0 and hence 9 cannot be subtracted from itself.
方法:想法是迭代给定数字中的所有数字并检查 9 – current_digit 是否小于 current_digit 然后用9 – current_digit替换该数字,否则不要更改数字。如果数字的第一个数字是9,那么不要更改数字,我们不能在形成的新数字中添加尾随零。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to invert the digits of
// integer N to form minimum
// possible number
void number(int num)
{
// Initialize the array
int a[20], r, i = 0, j;
// Iterate till the number N exists
while (num > 0) {
// Last digit of the number N
r = num % 10;
// Checking if the digit is
// smaller than 9-digit
if (9 - r > r)
// Store the smaller
// digit in the array
a[i] = r;
else
a[i] = 9 - r;
i++;
// Reduce the number each time
num = num / 10;
}
// Check if the digit starts
// with 0 or not
if (a[i - 1] == 0) {
cout << 9;
i--;
}
// Print the answer
for (j = i - 1; j >= 0; j--)
cout << a[j];
}
// Driver Code
int main()
{
// Given Number
long long int num = 4545;
// Function Call
number(num);
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function to invert the digits of
// integer N to form minimum
// possible number
static void number(int num)
{
// Initialize the array
int a[] = new int[20];
int r, i = 0, j;
// Iterate till the number N exists
while (num > 0)
{
// Last digit of the number N
r = num % 10;
// Checking if the digit is
// smaller than 9-digit
if (9 - r > r)
// Store the smaller
// digit in the array
a[i] = r;
else
a[i] = 9 - r;
i++;
// Reduce the number each time
num = num / 10;
}
// Check if the digit starts
// with 0 or not
if (a[i - 1] == 0)
{
System.out.print("9");
i--;
}
// Print the answer
for (j = i - 1; j >= 0; j--)
System.out.print(a[j]);
}
// Driver Code
public static void main(String []args)
{
// Given Number
int num = 4545;
// Function Call
number(num);
}
}
// This code is contributed by rock_cool
Python3
# Python3 program for the above approach
# Function to invert the digits of
# integer N to form minimum
# possible number
def number(num):
# Initialize the array
a = [0] * 20
r, i, j = 0, 0, 0
# Iterate till the number N exists
while (num > 0):
# Last digit of the number N
r = num % 10
# Checking if the digit is
# smaller than 9-digit
if (9 - r > r):
# Store the smaller
# digit in the array
a[i] = r
else:
a[i] = 9 - r
i += 1
# Reduce the number each time
num = num // 10
# Check if the digit starts
# with 0 or not
if (a[i - 1] == 0):
print(9, end = "")
i -= 1
# Print the answer
for j in range(i - 1, -1, -1):
print(a[j], end = "")
# Driver Code
if __name__ == '__main__':
# Given Number
num = 4545
# Function Call
number(num)
# This code is contributed by Mohit Kumar
C#
// C# program for the above approach
using System;
class GFG{
// Function to invert the digits of
// integer N to form minimum
// possible number
static void number(int num)
{
// Initialize the array
int[] a = new int[20];
int r, i = 0, j;
// Iterate till the number N exists
while (num > 0)
{
// Last digit of the number N
r = num % 10;
// Checking if the digit is
// smaller than 9-digit
if (9 - r > r)
// Store the smaller
// digit in the array
a[i] = r;
else
a[i] = 9 - r;
i++;
// Reduce the number each time
num = num / 10;
}
// Check if the digit starts
// with 0 or not
if (a[i - 1] == 0)
{
Console.Write("9");
i--;
}
// Print the answer
for (j = i - 1; j >= 0; j--)
Console.Write(a[j]);
}
// Driver Code
public static void Main(string []args)
{
// Given Number
int num = 4545;
// Function Call
number(num);
}
}
// This code is contributed by Ritik Bansal
Javascript
输出:
4444
时间复杂度: O(log 10 N)
辅助空间: O(log 10 N)