如何做str和int递归,一次一个字符?

ryoqjall  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(197)

所以我被困在这个问题上,你有办法吗 equalNumbers(String str, int num) ,它确定str中的字符是否表示与num相同的数字。空字符串等于零。

equalNumbers("123", 123) true
equalNumbers("9", 999) false

等等。
这个方法应该是递归的,所以没有循环,也没有使用类似的东西 Integer.parseInt , Integer.valueOf ,和 integer.decode() . 允许使用助手函数。
它鼓励使用 charAt(index) 以及 Character.gerNumericValue(ch) .

基于它鼓励我做的事情,我想它希望我逐个字符地遍历字符串,将该字符转换为整数,然后一次将其与整数中的一个数字进行比较。似乎我唯一可以做的转换是char到int。所以我的问题是:
我应该用字符构建一个字符串,然后将整个字符串转换成整数吗(不认为这是允许的)
是否可以在整数中逐个索引,而不将其转换为字符串?
我会展示我自己的代码,但是我对这些数据类型的工作原理有一个概念上的空白。

qmelpv7a

qmelpv7a1#

通常,公共函数调用带有额外参数的私有递归函数。为您的代码使用 get_int_at_index 额外的递归函数需要 i 待通过。
在您的情况下,这是不需要的,但是您需要与 String (检查一个小零件) charAt )以及 int . 现在我怀疑 String.valueOf(int) 不是故意的,而是检查数字的一小部分,一个数字,由数字模10( % 10 ).
取模10将首先给出最右边的数字,因此:
int num int digit = num % 10; // Tiny part we deal with num = num / 10; // Rest String str char ch = str.charAt(str.length() - 1); // Tiny part str = str.substring(0, str.length() - 1); // Rest 所以

public static boolean equalNumbers(String str, int num) {
    if (str.isEmpty()) { // End recursion.
        return num == 0;
    }
    char ch = str.charAt(str.length() - 1);
    int digit = num % 10;
    if (Character.getNumericValue(ch) != digit) {
        return false;
    }
    str = str.substring(0, str.length() - 1);
    num = num / 10;
    return equalNumbers(str, num); // Recurse.
}

相关问题