Interview Question
Country: United States
this is kind of wrong..coz in the above code it goes wrong when n numbers are all zeroes..
i did not run a test for codes above.
it is in java. i know nothing about java.
i have one in C, but i think it is so difficult to understand it:
void foo(int *arr,int n,int i)
{
if (i==n) {
for (i = 0; i < n; i++) {
printf("%d\t",arr[i]);
}
printf("\n");
}else{
arr[i]=1;
foo(arr,n,i+1);
arr[i]=0;
foo(arr,n,i+1);
}
The following code may avoid repetitions:
public static void printAll(int[] data)
{
if(data == null) return;
if(data.length == 0) return;
int numOne = 0;
for(int i = 0; i < data.length; ++i)
{
numOne += data[i];
}
int numZero = data.length - numOne;
String str = "";
printHelper(numZero, numOne, 0, str, 0, 0);
}
private static void printHelper(int numZero, int numOne, int level, String str, int numZeroUsed, int numOneUsed)
{
if(level == numZero + numOne)
{
System.out.println(str);
return;
}
if(numZeroUsed < numZero)
{
String strNew = str;
strNew += "0";
printHelper(numZero, numOne, level+1, strNew , numZeroUsed+1, numOneUsed);
}
if(numOneUsed < numOne)
{
String strNew = str;
strNew += "1";
printHelper(numZero, numOne, level+1, strNew, numZeroUsed, numOneUsed+1);
}
}
1. count the number of ones
2. put a 1 at the lowest index, recursively put the rest ones in the rest n - 1 positions
3. repeat step 2 for 2, 3, ...
#include <stdio.h>
#define N 3
main(x){
int i;
for (i = 0; i<N;printf("%d",x >> i &1), i++);
printf("\n");
(1 << N)-x && main(x+1);
return 0;
}
or use this function:
void foo(unsigned int n)
{
int i, j;
for (i = 0; i < 1 << n; printf("\n"), i++)
for (j = 0; j < n; printf("%d", i >> j&1), j++);
}
- Anonymous October 24, 2012