问题,
- 如果数字 x 可以除以 3,则返回 "a"
- 如果数字 x 可以除以 5,则返回 "b"
- 如果数字 x 可以被 3 和 5 整除,则返回 "ab"
我的解决方案
if(x mod 3 ==0 ) return "a"
else if (x mod 3 == 0) return "b"
else if (x mod 3 == 0 && x mod 5) return "ab"
除了这个还有其他有效的解决方案吗?
问题,
我的解决方案
if(x mod 3 ==0 ) return "a"
else if (x mod 3 == 0) return "b"
else if (x mod 3 == 0 && x mod 5) return "ab"
除了这个还有其他有效的解决方案吗?
节省一些计算:
boolean mod3 = x mod 3 == 0
boolean mod5 = x mod 5 == 0
if (mod3 && mod5) return "ab"
if (mod3) return "a"
if (mod5) return "b"
IFF ((x mod 3 == 0) 和 (x mod 5 == 0)) <=> (x mod 15 == 0)
if (x mod 15 == 0) return "ab"
else if(x mod 3 == 0 ) return "a"
else if (x mod 5 == 0) return "b"
稍微更有效的......而且绝对更正确......解决方案是:
if (x mod 3 == 0) {
if (x mod 5 == 0) {
return "ab"
} else {
return "a"
}
} else if (x mod 5 == 0) {
return "b";
} else {
// probably ...
return "";
}
请注意,性能差异很可能是微不足道的,而且很可能为零……如果 JIT 编译器足够聪明的话。这适用于所有解决方案。
它应该是
if (x mod 3 == 0 && x mod 5 == 0) return "ab"
else if(x mod 3 ==0 ) return "a"
else if (x mod 5 == 0) return "b"
否则即使数字可以被 3 和 5 整除,也不会返回 "ab"
或者:
String result = "";
if (x mod 3 == 0) result += "a";
if (x mod 5 == 0) result += "b";
return result;
但它有字符串连接的开销
string result = ""
if(x mod 3 == 0 )
{
result += "a"
}
if(x mod 5 == 0 )
{
result += "b"
}
return result;
这种方法只检查一次 3 和 5 的模数。
这是经典的FizzBuzz 问题,您应该始终将第一种情况视为公共分隔符,然后按降序进行,如下所示:
if (x mod 3 == 0 && x mod 5) return "ab"
else if(x mod 5 ==0 ) return "b"
else if (x mod 3 == 0) return "a"
String result="";
result=(x%3 == 0 && x%5 == 0 ? "ab" : x%5 == 0 ? "a" : x%3 == 0 ? "b" : "not divisible to any number" );
System.out.println(result);