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

时间:2016-06-08 20:16:58

标签: java arrays long-integer

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

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

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

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

1 个答案:

答案 0 :(得分:5)

你可以尝试这样的事情

int term_count = 0;
while(number > 0){
    if(number % 100 == term)
        term_count++;
    number = number/10
}

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

类似这样的事情

  

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

并且如果term_count为0,那么数字中没有出现该术语

希望这会有所帮助。

P.S - 解决方案可能在语法上不正确,因为OP不需要确切的答案。只是逻辑。