Amazon Interview Question
Testing / Quality Assurancesint reverse(int num)
{ int n;
int rev = 0;
n = num;
while(n >0)
{
t = num%10;
rev = rev *10 + t;
n = n/10;
}
return rev;
}
Sorry, forgot to check for repeating digits.
int reverse(int num)
{ int n;
int rev = 0;
int flag = 1;
n = num;
while(n >0)
{
t = num%10;
temp = rev;
while(temp >0)
{
if (t == temp%10)
{
flag=0;
break;
}
else
{
flag = 1;
temp = temp/10;
}
}
if(flag == 1)
rev = rev *10 + t;
n = n/10;
}
return rev;
}
int Reverse(int num)
{
int mod=0, ret=0;
int arr[10]={0};
while(num)
{
mod=num%10;
if(arr[mod]==0)
{
arr[mod]=1;
ret=ret*10+mod;
}
num=num/10;
}
return ret;
}
The idea is to have an array of size 10 (having all digits from 0-9) whic keeps a note of whether an element is repeated or not.
public static int reverseNumber(int num, int r, HashSet digits){
if(num<=0){
System.out.println("reverse "+ r);
return r;
}
int lastDigit = num%10;
if(digits.add(lastDigit)){
r = r*10 +lastDigit;
}
num = num/10;
reverseNumber(num, r,digits);
return r;
}
call as
reverseNumber(4324,0,new HashSet());
<pre lang="c++" line="1" title="CodeMonkey5950" class="run-this">#include<iostream>
using namespace std;
int main()
{
int num,rev=0,x=0;
bool numbrs[10]={0};
cout<<"Enter a number";
cin>>num;
while(num>0)
{
x=num%10;
if(numbrs[x]!=1)
{
rev=rev*10+x;
numbrs[x]=1;
}
num=num/10;
}
cout<<endl<<rev;
system("pause");
return 0;
}
</pre><pre title="CodeMonkey5950" input="yes">
</pre>
Using Java:
import java.util.*;
public class ReverseInteger {
public static void main(String[] args){
int i = 55151321;
int rev = 0;
List<Integer> tempList = new LinkedList<Integer>();
boolean foundDuplicate = false;
while (i>=1)
{
ListIterator<Integer> it = tempList.listIterator();
while(it.hasNext())
{
if(it.next() == i%10 )
{
System.out.println("Found duplicate - Ignoring:" + i%10);
foundDuplicate = true;
}
}
if(!foundDuplicate)
{
tempList.add(i%10);
rev = (rev*10)+(i%10);
}
foundDuplicate = false;
i=i/10;
}
System.out.println("The List "+ tempList);
System.out.println("rev without duplicate=" + rev );
}
}
<pre lang="" line="1" title="CodeMonkey47098" class="run-this">import java.util.*;
public class ReverseInteger {
public static void main(String[] args){
int i = 55151321;
int rev = 0;
List<Integer> tempList = new LinkedList<Integer>();
boolean foundDuplicate = false;
while (i>=1)
{
ListIterator<Integer> it = tempList.listIterator();
while(it.hasNext())
{
if(it.next() == i%10 )
{
System.out.println("Found duplicate - Ignoring:" + i%10);
foundDuplicate = true;
}
}
if(!foundDuplicate)
{
tempList.add(i%10);
rev = (rev*10)+(i%10);
}
foundDuplicate = false;
i=i/10;
}
System.out.println("The List "+ tempList);
System.out.println("rev without duplicate=" + rev );
}
}
</pre><pre title="CodeMonkey47098" input="yes">
</pre>
this is a standard question.
an idiot who interviewed me asked this one and when i answered this in a few minutes, he started giving me lectures from Gita, saying answers should be spontaneous and without preparation.
its true idiot. had your questions been spontaneous, my answers would have been.
I tried by executing above code, but they are not producing the desired output of "542" for the input of "2452". Here is my code:
#include <stdio.h>
main()
{
int num = 0, dup, rev = 0;
int i = 0, arr[10]= {0};
printf ("\n Please enter a number: ");
scanf ("%d", &num);
dup = num;
while (dup > 0) {
i = dup%10;
arr[i]++;
dup = dup/10;
}
dup = num;
while (dup > 0) {
i = dup%10;
if (arr[i] == 1)
rev = rev * 10 + i;
else
arr[i]--;
dup = dup/10;
}
printf ("\n Reverse number is: %d \n", rev);
}
int Reverse(int num){
int rev1,rev2;
int temp;
rev1=0;rev2=0; temp=0;
while(num>0){
temp=num%10;
if(!Used(rev2,temp)){
rev2=rev2*10+temp;
rev1=rev2;
num=num/10
}
else{
num=num/10;
}
}
}
int Used(int num,int temp){
int x=0;
while(num>0){
x=num%10;
if (x==temp){
return 1;
}
else{
num=num/10;
}
}
}
import java.io.*;
import java.util.*;
public class revEliminate
{
public static void main(String[] args)
{
String s= "2452";
int a [] = new int[4];
int b=0;
int d =0;
int counter=0;
System.out.println("The original Array");
for(int i=0; i<s.length(); i++)
{
b = Character.getNumericValue(s.charAt(i));
a[i]= b;
System.out.println("\t"+a[i]);
}
int aLength=a.length;
int c[] = new int[aLength];
for(int j=0 ; j<aLength-1 ; j++)
{
for(int k=aLength-1; k>j ; k--)
{
if(a[j]!=a[k])
{
d=a[j];
}
}
c[j]=d;
counter=counter+1;
d=0;
}
System.out.println();
System.out.println("The Duplicates Eliminated Array");
for (int l=0; l<counter ; l++)
{
System.out.println("\t"+c[l]);
}
System.out.println();
System.out.println("Counter of duplicate eliminate array:"+counter);
int e [] = new int[counter];
int n=0;
for (int m=counter-1; m>=0; m--)
{
e[n]=c[m];
n++;
}
System.out.println();
System.out.println("The Reversed Array array:");
for (int index=0; index<counter ; index++)
{
System.out.println("\t"+e[index]);
}
}
}
ex: 1020 -> 201 ?
or should the answer be 021, i.e. 21?
For second variant:
- strezh September 20, 2010