复杂的代码/算法优化(例如简化)窘迫

时间:2011-03-18 20:31:59

标签: java algorithm

如何简化此代码?


  if      (x == 0) x = 1;
  else if (x == 1) x = 0;
  else if (x == 2) x = 3;
  else if (x == 3) x = 2;

15 个答案:

答案 0 :(得分:15)

如果x始终在0到3之间,那么试试这个:

x ^= 1;

它切换最不重要的位。

如果x可以是0到3之间的值,那么您可以先测试:

if (x >= 0 && x <= 3) {
    x ^= 1;
}

答案 1 :(得分:9)

这是最简单的形式:

if      (x == 0) x = 1;
else if (x == 1) x = 0;
else if (x == 2) x = 3;
else if (x == 3) x = 2;
等等......这正是你的代码。

隐藏的一个内衬并不简单。

答案 2 :(得分:5)

要使用伪代码表示法,可能:

if (x % 2 == 0) x = x + 1
   else x = x - 1

例如,如果是偶数,则添加一个,否则减去?然而,在优化方面,我没有看到原始代码的特别慢或错。

答案 3 :(得分:5)

您可以使用以下内容:

int mymap[4] = {1,0,3,2};

然后在你的代码中使用:

x = mymap[x];

答案 4 :(得分:2)

if(x >= 0 && x <= 3)
  if((x%2) != 0) //odd
    x--;
  else if((x%2) == 0) //even
    x++;

答案 5 :(得分:2)

不是我认为这更简单,并且不会将案例限制为0..3,但是:

x += (x % 2 == 0) ? 1 : -1; 

答案 6 :(得分:2)

x ^= x & ~3 == 0 ? 1 : 0;

不幸的是,我的代码非常简单,因此无法使最少30个字符...

答案 7 :(得分:1)

处理这样的简单数据的常用方法是使用switch语句。

答案 8 :(得分:1)

代码使用switch语句更具可读性:

switch(x) {
case 0: x=1: break;
case 1: x=0: break;
case 2: x=3: break;
case 3: x=2; break;
}

然而,它只是代码可读性,而不是算法,也不是优化。

答案 9 :(得分:1)

x^=1;

除非x可以低于0或高于3,否则问题规范不会说明。

答案 10 :(得分:1)

if( 0 <= x && x <= 3 )
  x ^= 1;

答案 11 :(得分:1)

一个班轮:

x=(x==0)?1:((x==1)?0:(x==2)?3:(x==3)?2:x);

答案 12 :(得分:1)

if ( x >>> 2 == 0 )
{   x ^= 1;
}

答案 13 :(得分:0)

最好的方法......

if(x % 2 == 0){
  x = +x;
}else{
  x = -x;
}

答案 14 :(得分:-2)

可能使用switch statements