繁体   English   中英

Java-建立一个递归,用偶数替换偶数

[英]Java- Builiding a recursion that replace even digits with zero

您好我需要构建一个递归,用偶数数字替换零:例如,数字1254将是1050,数字332-将是330,数字24 - 将为0

我开始研究它,但一段时间后变得非常无能为力

 public static int replaceEvenDigitsWithZero(int number){
    if(number<1)
        return number;
    if(number%2==0 && number%10!=0){
        int temp=number%10;
        return(number/10+replaceEvenDigitsWithZero(number-temp));
    }
    return(replaceEvenDigitsWithZero(number/10));
}
public static void main(String[] args) {
        int num1 = 1254;
        System.out.println(num1 + " --> " + replaceEvenDigitsWithZero(num1));

        int num2 = 332;
        System.out.println(num2 + " --> " + replaceEvenDigitsWithZero(num2));

        int num3 = 24;
        System.out.println(num3 + " --> " + replaceEvenDigitsWithZero(num3));

        int num4 = 13;
        System.out.println(num4 + " --> " + replaceEvenDigitsWithZero(num4));
    }

}

由于您的方法仅查看最后一位数,因此当input >= 10时,它应始终使用input / 10调用自身。

然后,您获取递归返回的值,将其乘以10并将最后一位数字添加回去,如果是奇数。

public static int replaceEvenDigitsWithZero(int number) {
    int result = 0;
    if (number >= 10)
        result = replaceEvenDigitsWithZero(number / 10) * 10;
    if (number % 2 != 0)
        result += number % 10;
    return result;
}

如果你需要一个1-liner,这里是:;)

public static int replaceEvenDigitsWithZero(int number) {
    return (number%2 == 0 ? 0 : number % 10) + (number<10 ? 0 : 10 * replaceEvenDigitsWithZero(number / 10));
}

嗯......设计一个递归算法总是有相同的步骤:

  1. 确定基本情况 ,即终止递归调用的方案。

  2. 问题减小到更小(朝向基本情况)。

对于这个要求,可以通过除以10来轻松地解决问题。这也很容易导致基本情况:单个数字是基本情况。 所以快速实现可以是:

public static int replaceEvenDigitsWithZero(int number) {
    // I added handling of negative numbers ...
    if (number < 0) {
        return -replaceEvenDigitsWithZero(-number);
    }

    // base case
    if (number < 10) {
        return replaceOneDigit(number);
    }

    // recursion
    int lastDigit = number % 10;
    int remainder = number / 10;
    return replaceEvenDigitsWithZero(remainder) * 10 + replaceOneDigit(lastDigit);
}

public static int replaceOneDigit(int digit) {
    return (digit % 2 == 0) ? 0 : digit;
}

我添加了一个辅助方法,用于将偶数转换为零。

现在的输出是:

1254 - > 1050

332 - > 330

24 - > 0

13 - > 13

您需要跟踪您号码中的当前位置。 在当前函数中,您将只返回数字的第一个数字(因为每次调用递归时都将它除以10)。

public static int replaceEvenDigitsWithZero(int number, int position){

    // cancel condition:
    if(number < 10 * position) {
        return number;
    }

    // edit number:
    if (position > 0) {
        int currentNumber = number / (10 * position);    
    } else {
        currentNumber = number;
    }

    if(currentNumber%2==0){  //even?
        int multiplyValue = currentNumber % 10; // get rest of division by 10 (== digit in current position)
        number = number - (multiplyValue * (10 * position)); // set current position to zero
    }

    // recursive call:
    return replaceEvenDigitsWithZero(number,position+1);
}

没有测试我的代码,但我希望你知道如何做到这一点。 使用replaceEvenDigitsWithZero(num1,0)启动。

1转换为String

2 F(字符串):取第一个数字:将2,4,6,8个字符替换为0

3连接到F(剩下的字符串)

4转换为int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM