返回2个可能的论点的另一个论点,而不使用条件
例如,如果我有一个保证接收5或7作为参数的函数,我希望函数返回5如果收到7和7如果收到5不使用任何条件。
我在接受采访时被问到了这个问题,非常难过,谢谢。
简单的算术:
return 7 - input + 5;
(可以简化为return 12 - input;
)
假设input是7:
返回7 – 7 + 5 – >返回5
或者如果input是5:
返回7 – 5 + 5 – >返回7
您可以使用任何可以颠倒的简单交换计算:
- 加法:
f(x)=7+5-x
- xor:
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中)如果closures,则打开2位,如果打开则closures。
怎么样:
public int q(int in) { static final int[] ret = {0, 0, 0, 0, 0, 7, 0, 5}; return ret[in]; }
如果我曾经是一个面试,而你只是为了数字input而解决了这个问题,那么我的下一个问题就是:“如何解决非数字input的问题? 因为我不会找math的聪明。 相反,这个怎么样?
List<String> options = new ArrayList<>(Arrays.asList("bob", "fred")); options.remove("bob"); System.out.println(options.get(0));
这显然可以很容易地适应任何types,包括Object
,只要Object
的平等性能够正确地工作,作为奖励,它可以在其他语言(如Groovy)中更简洁地expression:
println((["bob", "fred"] - "bob").first())
在任何情况下,输出显然都是“fred”。 如果我是面试的人,这就是我要找的答案。
public int xyz(int x) { return 35 / x; }
xor如何工作? [for case f(x)= 7 ^ 5 ^ x]
异或(^)是异或并且以这种方式工作
a|b|a^b ------- 0|0| 0 0|1| 1 1|0| 1 1|1| 0
所以异或(^)可以用来改变一些数字的位。 例如,当我们想要改变任何数字的最后两位时(比如xxxx10
到xxxx01
),我们可以用numbrer ^ 3
来做,因为3是二进制00011。
这里是关于异或的一些事实
- XOR是对称的 – >
a^b
=b^a
- XOR是关联的 – >
(a^b)^c
=a^(b^c)
-
a^a
=0
(a
将被replace为零,零不会被更改)例如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