1
public static boolean sameNumbers(int number) {
    boolean isSame;
    isSame = (number % 10) == (number / 10) % 10;      
    sameNumbers(number / 10);
    return isSame;
}

我的任务是实现一个方法来检查给定的 int 值是否具有所有相同的数字(例如 666 或 1111)。但是,要求是我应该只选择递归而不是迭代。

我知道我的方法行不通,但我真的不知道如何在没有任何if statements. 有任何想法吗?

4

3 回答 3

6

你有正确的方法。这只是将基本案例与递归组件结合起来的问题。如果你想避免if,只需这样做:

public static boolean sameNumbers(int number) {
    return number < 10 || ((number % 10) == (number / 10) % 10) 
                          && sameNumbers(number / 10));
}
于 2013-10-24T18:51:38.873 回答
0

在处理递归问题时,您必须将其拆分为基本情况和递归情况。因此,例如,您知道任何具有一位数字的数字都包含相同的数字。那将是您的基本情况。

对于多于一位的数字,您可以检查两位数,如果它们不匹配,则会快速失败。如果它们确实匹配,则砍掉一个并根据缩短的数字返回测试。

于 2013-10-24T18:53:55.747 回答
0

对于更详细的实现:

public static bool sameNumbers(int number) {
    int onesPlace = number % 10;
    int shifted = number / 10;
    int tensPlace = shifted % 10;
    return onesPlace == number || (onesPlace == tensPlace && sameNumbers(shifted));
}

根据您对正确的定义,这将正确处理负数。


如果允许您使用if 语句,这将为您节省一些说明:

public static bool sameNumbers(int number) {
    int onesPlace = number % 10;
    if (onesPlace == number) {
        return true;
    }
    int shifted = number / 10;
    int tensPlace = shifted % 10;
    return onesPlace == tensPlace && sameNumbers(shifted);
}
于 2013-10-24T19:04:06.007 回答