在不使用Array的情况下查找其他数字中的数字

Viv*_*hta 2 java arrays long-integer

最近我参加了一次采访,我被要求编写一个函数来查找数字中的术语及其出现的次数.

让我们说term = 51,number = 164518351,所以51确实退出数量并且它发生了2次,所以返回2.

我的解决方案 - 将数字和术语转换为字符串,并在数字字符串中将术语字符串替换为"A",然后最后计算数字字符串中的"A"数.他让我在不使用字符串的情况下解决,所以我采用了数组方法.

但他说我也不能使用数组.所以我想知道是否有其他方法可以做到这一点?我不想要确切的代码或算法,我只想知道我们可以采用各种方法来解决这个问题,而且时间复杂度最低.

Tra*_*ect 5

你可以尝试这样的事情

int term_count = 0;
while(number > 0){
    if(number % 100 == term)
        term_count++;
    number = number/10
}
Run Code Online (Sandbox Code Playgroud)

这将检查数字的最后两位是否等于该项,并继续这样做,忽略该数字的每个单位数字.

这样的事情

164518351%100 == 51

16451835%100 == 51

1645183%​​100 == 51

164518%100 == 51

....

当然,在这里,我知道这个术语是两位数,所以我修改为100.如果你不知道,你可以找到术语中的位数,然后修改数字

10 ^(num_of_digits_in_term)

你可以找到像这样的位数

int tempTerm = term, termDigitCount = 0;
while(tempTerm > 0){
    termDigitCount++;
    tempTerm /= 10;
}

// 51 > 0 -> termDigitCount = 1
// 1 > 0 -> termDigitCount = 2
// 0 > 0 -> exit while loop
Run Code Online (Sandbox Code Playgroud)

最后,如果term_count为0,则数字中没有出现该术语

希望这可以帮助.

PS - 解决方案可能在语法上不正确,因为OP不想要一个确切的答案.只是逻辑.