文章目录
  1. 1. 方法一
  2. 2. 方法二
  3. 3. 方法三
  4. 4. 方法四
  5. 5. 方法五
  6. 6. 方法六
  7. 7. 方法七
  8. 8. 方法八
  9. 9. 方法九
  10. 10. 方法十

前几天面试,遇到一个有意思的题目:要写写一个方法,输入1则输出0,输入0则输出1。假设该函数输入变量类型和返回变量类型均为int。据说有很多种写法,下面是我自己想到的和找到的一些方法:

方法一

使用if-else判断来处理。比较简单,代码如下。

1
2
3
4
5
6
7
8
9
public int reverse1(int input) {
if (input == 0) {
return 1;
} else if (input == 1) {
return 0;
} else { // 输入有误
return -1;
}
}

方法二

跟方法二差不多,用while循环来做,其他代码不变。

1
2
3
4
5
6
public int reverse2(int input) {
while (input == 1) {
return 0;
}
return 1;
}

方法三

使用switch-case来实现。

1
2
3
4
5
6
7
8
9
10
public int reverse3(int input) {
switch (input) {
case 1:
return 0;
case 0:
return 1;
default: // 输入有误
return -1;
}
}

方法四

使用三目运算符。

1
2
3
public int reverse4(int input) {
return input == 1 ? 0 : 1;
}

方法五

将传入的值减1,然后去绝对值。

1
2
3
public int reverse5(int input) {
return Math.abs(input - 1);
}

方法六

将传入的值加1取除以2的余数。

1
2
3
public int reverse6(int input ) {
return (input + 1) % 2;
}

方法七

与1异或。

1
2
3
public int reverse7(int input) {
return input^1;
}

方法八

减去2,然后取补码。

1
2
3
public int reverse8(int input) {
return ~(input - 2);
}

方法九

用0和1的和减去输入值。

1
2
3
public int reverse9(int input) {
return 1 - input;
}

方法十

表驱动方法。

1
2
3
4
5
6
7
8
public int reverse10(int input) {
int[] values = {1, 0};
if (input == 0 || input == 1) {
return values[input];
} else {
return -1;
}
}

如您有其他算法可留言或者邮件(jingle1267@163.com)告诉我,谢谢。


本文地址 http://94275.cn/2014/09/25/0-in-1-out-1-in-0-out/ 作者为 Zhenguo

author:Zhenguo
Author: Zhenguo      Blog: 94275.cn/     Email: jinzhenguo1990@gmail.com
I have almost 13 years of application development experience and have a keen interested in the latest emerging technologies. I use my spare time to turn my experience, ideas and love for IT tech into informative articles, tutorials and more in hope to help others and learn more.
文章目录
  1. 1. 方法一
  2. 2. 方法二
  3. 3. 方法三
  4. 4. 方法四
  5. 5. 方法五
  6. 6. 方法六
  7. 7. 方法七
  8. 8. 方法八
  9. 9. 方法九
  10. 10. 方法十
返回顶部