我有一个练习,我必须编写一个接收整数和数字 d 的递归方法。此方法必须返回一个新数字,仅包含大于 d 的数字。
例如,对于数字 19473 和数字 3,返回的数字将为 947。
到目前为止,我的代码还没有取得一些进展,所以我没有任何东西可以向您展示。方法的签名:
public static int filter(int n, int d)
任何帮助都会很棒,
谢谢你。
public static int filter(int n, int d)
{
if (n==0) return 0;
if (n%10>d) return 10*filter(n/10,d)+n%10;
else return filter(n/10,d);
}
理解的关键:
整数 n(n>10),假设 a=n/10 b=n%10。
您可以看到 filter(n)=(String)filter(a)+(String)filter(b) (我的意思是,将结果转换为字符串并将两个字符串连接起来。它在语法上无效,只是为了理解它) .
但是我们不需要弄脏字符串,算术对整数也可以做同样的工作。
这是您的详细答案:
int filter(int n, int d) {
if (n >= 0 && d >= 0) { // n and d non-negetive
if (n == 0) { // terminating criteria
return 0;
} else {
int currDigit = n % 10;
if (n % 10 > d) {
return filter(n / 10, d) * 10 + currDigit; //gathering digits greater thand d
} else {
return filter(n / 10, d); // ignoring digits less than or equal d
}
}
}
return -1;
}
您应该知道的一件事,如果您是编码新手并想成为一名出色的编码员!我对你的建议是,不要剥夺你大脑思考编码问题的机会!永远相信你的大脑。保持耐心。再试一次。
干杯和快乐编码!