给定一个整数N ,任务是检查每个连续数字集的乘积是否不同。
例子:
Input: N = 234
Output: Yes
Set | Product |
---|---|
{2} | 2 |
{2, 3} | 2 * 3 = 6 |
{2, 3, 4} | 2 * 3 * 4 = 24 |
{3} | 3 |
{3, 4} | 3 * 4 = 12 |
{4} | 4 |
All the productas are distinct.
Input: N = 1234
Output: No
Set {1, 2} and {2} both the same product i.e. 2.
方法:将每个连续子序列的数字乘积存储在集合中。如果要插入的产品已经存在于集合中,那么答案为“否”,否则所有产品最终都是不同的。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function that returns true if the product
// of every digit of a contiguous subsequence
// is distinct
bool productsDistinct(int N)
{
// To store the given number as a string
string s = "";
// Append all the digits
// starting from the end
while (N) {
s += (char)(N % 10 + '0');
N /= 10;
}
// Reverse the string to get
// the original number
reverse(s.begin(), s.end());
// Store size of the string
int sz = s.size();
// Set to store product of
// each contiguous subsequence
set se;
// Find product of every
// contiguous subsequence
for (int i = 0; i < sz; i++) {
int product = 1;
for (int j = i; j < sz; j++) {
product *= (int)(s[j] - '0');
// If current product already
// exists in the set
if (se.find(product) != se.end())
return false;
else
se.insert(product);
}
}
return true;
}
// Driver code
int main()
{
int N = 2345;
if (productsDistinct(N))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function that returns true if
// the product of every digit of a
// contiguous subsequence is distinct
static boolean productsDistinct(int N)
{
// To store the given number
// as a string
String s = "";
// Append all the digits
// starting from the end
while (N > 0)
{
s += (char)(N % 10 + '0');
N /= 10;
}
// Reverse the string to get
// the original number
s = reverse(s);
// Store size of the string
int sz = s.length();
// Set to store product of
// each contiguous subsequence
HashSet se = new HashSet();
// Find product of every
// contiguous subsequence
for (int i = 0; i < sz; i++)
{
int product = 1;
for (int j = i; j < sz; j++)
{
product *= (int)(s.charAt(j) - '0');
// If current product already
// exists in the set
if (se.contains(product))
return false;
else
se.add(product);
}
}
return true;
}
static String reverse(String input)
{
char[] a = input.toCharArray();
int l, r;
r = a.length - 1;
for (l = 0; l < r; l++, r--)
{
// Swap values of l and r
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.valueOf(a);
}
// Driver code
public static void main(String[] args)
{
int N = 2345;
if (productsDistinct(N))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed
// by PrinciRaj1992
Python3
# Python 3 implementation of the approach
# Function that returns true if the product
# of every digit of a contiguous subsequence
# is distinct
def productsDistinct(N):
# To store the given number as a string
s = ""
# Append all the digits
# starting from the end
while (N):
s += chr(N % 10 + ord('0'))
N //= 10
# Reverse the string to get
# the original number
s = s[::-1]
# Store size of the string
sz = len(s)
# Set to store product of
# each contiguous subsequence
se = []
# Find product of every
# contiguous subsequence
for i in range(sz):
product = 1
for j in range(i, sz, 1):
product *= ord(s[j]) - ord('0')
# If current product already
# exists in the set
for p in range(len(se)):
if se[p] == product:
return False
else:
se.append(product)
return True
# Driver code
if __name__ == '__main__':
N = 2345
if (productsDistinct(N)):
print("Yes")
else:
print("No")
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function that returns true if
// the product of every digit of a
// contiguous subsequence is distinct
static Boolean productsDistinct(int N)
{
// To store the given number
// as a string
String s = "";
// Append all the digits
// starting from the end
while (N > 0)
{
s += (char)(N % 10 + '0');
N /= 10;
}
// Reverse the string to get
// the original number
s = reverse(s);
// Store size of the string
int sz = s.Length;
// Set to store product of
// each contiguous subsequence
HashSet se = new HashSet();
// Find product of every
// contiguous subsequence
for (int i = 0; i < sz; i++)
{
int product = 1;
for (int j = i; j < sz; j++)
{
product *= (int)(s[j] - '0');
// If current product already
// exists in the set
if (se.Contains(product))
return false;
else
se.Add(product);
}
}
return true;
}
static String reverse(String input)
{
char[] a = input.ToCharArray();
int l, r;
r = a.Length - 1;
for (l = 0; l < r; l++, r--)
{
// Swap values of l and r
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.Join("",a);
}
// Driver code
public static void Main(String[] args)
{
int N = 2345;
if (productsDistinct(N))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by 29AjayKumar
输出:
Yes