【发布时间】:2018-06-14 06:38:05
【问题描述】:
每个数字都应该大于或等于另一个数字。如果所有数字都相等,则返回false。
例子:
201 >= 200 true
200 >= 200 false
200 >= 101 false
210 >= 201 false
普通的方式是不断除以10,然后比较余数。
这是Java代码:
private boolean isScoreBetter(final int score, final int scoreToCompare) {
int a = score;
int b = scoreToCompare;
int betterCount = 0;
while (a > 0 && b > 0) {
int temp = a % 10 - b % 10;
if (temp < 0) {
return false;
}
if (temp > 0) {
betterCount++;
}
a /= 10;
b /= 10;
}
return betterCount > 0 && a >= b;
}
有没有更好的方法? “更好”的定义:
- 代码需要简短而优雅
- 该算法基于数字计算更好,不包含int -> string等类型转换。
两个数的约束:
- 它们是非负数
- 位数不一定相同
感谢您的回复。
【问题讨论】:
-
对于单个数字,词法和数字比较是相同的,你可以
all(a >= b for a, b in zip(str(n1), str(n2))) -
你如何协调
210 >= 201 false和210 < 201 false -
@ReblochonMasque 这是partial order。
-
你如何定义“更好”?你的意思是更快、更少的代码、更少的内存,还是别的什么?
-
@ChatterOne 嗨 Chatter,“更好”的定义是更新 :)