我提供了一些转换为java代码的c代码。实现三种不同的生成N的方法! Java中N个元素的排列。我提供的代码是我转换后的c代码到java,我成功了直到这行代码,swap((n& 0x01)?1:i,n); ...在permute3方法中,我不完全确定它正在做什么或意味着什么,我需要知道如何在java中编写等价物。
public class Permute {
public static final long MILLION = 1000000L;
static int N;
static char p[];
static int[][] table = { {0}, {0, 1}, {0, 1, 1}, {0, 1, 2, 3},
{0, 3, 1, 3, 1},
{0, 3, 4, 3, 2, 3},
{0, 5, 3, 1, 5, 3, 1},
{0, 5, 2, 7, 2, 1, 2, 3},
{0, 7, 1, 5, 5, 3, 3, 7, 1},
{0, 7, 8, 1, 6, 5, 4, 9, 2, 3},
{0, 9, 7, 5, 3, 1, 9, 7, 5, 3, 1},
{0, 9, 6, 3, 10, 9, 4, 3, 8, 9, 2, 3}};
public static void init()
{
p = new char[27];
p[0] = '*';
for(int i = 0; i < 26; i++)
{
p[i + 1] = (char) ('A'+i);
}
}
public static void swap(int i, int j)
{
char c;
c = p[i];
p[i] = p[j];
p[j] = c;
}
static void printIt()
{
long count = 0;
//to compare performance, comment out from here
for (int i = 1; i <= N; i++)
System.out.printf("%c", p[i]);
System.out.printf("\n");
//to here
count++;
}
static void permute1(int n)
{
if(n == 1)
{
printIt();
}
for(int i = 1; i <= n; i++)
{
swap(i, n);
permute1(n-1);
swap(i, n);
}
}
static void permute2(int n)
{
if(n == 1)
{
printIt();
return;
}
for(int i = 1; i <= n; i++)
{
permute2(n-1);
swap(table[n][i], n);
}
}
static void permute3(int n)
{
if(n == 1)
{
printIt();
return;
}
for(int i = 1; i <= n; i++)
{
permute3(n - 1);
swap((n & 0x01) ? 1 : i, n);
}
}
答案 0 :(得分:0)
二元运算符&amp; 以两种语言执行其操作数的按位乘法(AND)。
此表达式还使用三元运算符a ? b : c;
。首先,它检查a的值,如果为真,则返回b,否则返回c。
在C中,认为!= 0的整数值为真。 Java不会将整数值转换为布尔值。
因此,要使表达式起作用,您需要按如下方式编写它:
swap((n & 0x01) != 0) ? 1 : i, n);