给定正整数N ,任务是在除去所有包含数字9的自然数后找到第N个自然数。
例子:
Input: N = 8
Output: 8
Explanation:
Since 9 is the first natural number that contains the digit 9 and is the 9th natural number, therefore, no removal required to find the 8th natural number, which is 8.
Input: N = 9
Output: 10
Explanation:
Removing number 9, the first 9 natural numbers are {1, 2, 3, 4, 5, 6, 7, 8, 10}.
Therefore, the 9th natural number is 10.
天真的方法:解决上述问题的最简单方法是迭代到N,并排除所有小于N且包含数字9的数字。最后,打印获得的第N个自然数。
时间复杂度: O(N)
辅助空间: O(1)
高效的方法:可以基于以下观察来优化上述方法:
- It is known that, digits of base 2 numbers varies from 0 to 1. Similarly, digits of base 10 numbers varies from 0 to 9.
- Therefore, the digits of base 9 numbers will vary from 0 to 8.
- It can be observed that Nth number in base 9 is equal to Nth number after skipping numbers containing digit 9.
- So the task is reduced to find the base 9 equivalent of the number N.
请按照以下步骤解决问题:
- 初始化两个变量,例如res = 0和p = 1 , 将数字存储在基数9中并存储数字的位置。
- 在N大于0时进行迭代并执行以下操作:
- 更新资源作为解析度= RES + P *(N%9)。
- 将N除以9,然后将p除以10。
- 完成上述步骤后,打印res的值。
下面是上述方法的实现:
C++
// C++ implementataion of above approach
#include
using namespace std;
// Function to find Nth number in base 9
long long findNthNumber(long long N)
{
// Stores the Nth number
long long result = 0;
long long p = 1;
// Iterate while N is
// greater than 0
while (N > 0) {
// Update result
result += (p * (N % 9));
// Divide N by 9
N = N / 9;
// Multiply p by 10
p = p * 10;
}
// Return result
return result;
}
// Driver Code
int main()
{
int N = 9;
cout << findNthNumber(N);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG
{
// Function to find Nth number in base 9
static long findNthNumber(long N)
{
// Stores the Nth number
long result = 0;
long p = 1;
// Iterate while N is
// greater than 0
while (N > 0) {
// Update result
result += (p * (N % 9));
// Divide N by 9
N = N / 9;
// Multiply p by 10
p = p * 10;
}
// Return result
return result;
}
// Driver Code
public static void main(String[] args)
{
int N = 9;
System.out.print(findNthNumber(N));
}
}
// This code is contributed by splevel62.
Python3
# Python 3 implementataion of above approach
# Function to find Nth number in base 9
def findNthNumber(N):
# Stores the Nth number
result = 0
p = 1
# Iterate while N is
# greater than 0
while (N > 0):
# Update result
result += (p * (N % 9))
# Divide N by 9
N = N // 9
# Multiply p by 10
p = p * 10
# Return result
return result
# Driver Code
if __name__ == '__main__':
N = 9
print(findNthNumber(N))
# This code is contributed by bgangwar59.
C#
// C# implementataion of above approach
using System;
class GFG
{
// Function to find Nth number in base 9
static long findNthNumber(long N)
{
// Stores the Nth number
long result = 0;
long p = 1;
// Iterate while N is
// greater than 0
while (N > 0) {
// Update result
result += (p * (N % 9));
// Divide N by 9
N = N / 9;
// Multiply p by 10
p = p * 10;
}
// Return result
return result;
}
// Driver code
static void Main ()
{
int N = 9;
Console.Write(findNthNumber(N));
}
}
// This code is contributed by divyesh072019.
输出:
10
时间复杂度: O(log 9 N)
辅助空间: O(1)