例如,如果我有一个保证接收 5 或 7 作为参数的函数,我希望函数在接收到 7 时返回 5,如果在不使用任何条件的情况下接收到 5 时返回 7。
面试时被问到这个问题,非常困惑,谢谢。
例如,如果我有一个保证接收 5 或 7 作为参数的函数,我希望函数在接收到 7 时返回 5,如果在不使用任何条件的情况下接收到 5 时返回 7。
面试时被问到这个问题,非常困惑,谢谢。
简单的算术:
return 7 - input + 5;
(可以简化为return 12 - input;
)
假设输入为 7:
返回 7 - 7 + 5 --> 返回 5
或者如果输入是 5:
返回 7 - 5 + 5 --> 返回 7
您可以使用任何可以反转的简单交换计算:
f(x)=7+5-x
f(x)=7^5^x
f(x)=7*5/x
public int f(int x) {
return x ^ 2;
}
二进制:
7 = 111
5 = 101
2 = 010
XOR(Java 中的 ^)在关闭时翻转 2 位,如果打开则关闭。
怎么样:
public int q(int in)
{
static final int[] ret = {0, 0, 0, 0, 0, 7, 0, 5};
return ret[in];
}
如果我是面试的人,而你只为数字输入解决了这个问题,那么我的下一个问题将是,“对于非数字输入,你将如何解决这个问题?” 因为我不会寻找数学上的聪明才智。相反,这个怎么样?
List<String> options = new ArrayList<>(Arrays.asList("bob", "fred"));
options.remove("bob");
System.out.println(options.get(0));
这显然可以很容易地适应任何类型,包括Object
,只要对象的相等性正确运行,并且作为奖励,它可以用其他语言更简洁地表达,例如 Groovy:
println((["bob", "fred"] - "bob").first())
无论哪种情况,输出显然都是“fred”。如果我是面试的人,这就是我要寻找的答案。
public int xyz(int x) {
return 35 / x;
}
xor one 是如何工作的?[对于情况 f(x) = 7^5^x ]
XOR (^) 是异或,以这种方式工作
a|b|a^b
-------
0|0| 0
0|1| 1
1|0| 1
1|1| 0
因此 XOR (^) 可用于更改某个数字的位。例如,当我们想要更改任何数字的最后两位(例如)时xxxx10
,xxxx01
我们可以这样做,numbrer ^ 3
因为 3 是二进制 00011。
以下是关于 XOR 的一些事实
XOR 是对称的 -> a^b
=b^a
XOR 是关联的 -> (a^b)^c
=a^(b^c)
a^a
= 0
(里面的a
将被零替换,零不会改变)
例如 a = 157(二进制 010011101)
010011101
^ 010011101
-----------
000000000
0^a
= a
(其中的a
只能更改零,因此它们会将它们更改为一)
000000000
^ 010011101
-----------
010011101
所以使用事实(1)和(2)7^5^x == x^7^5 == x^5^7
让我们尝试检查如何x^7^5
工作。x=7
(x^7)^5 = (7^7)^5 = 0^5 = 5
同样的情况发生在x=5
(x^5)^7 = (5^5)^7 = 0^7 = 7