最近我参加了一次面试,要求我编写一个函数来查找数字中的术语及其出现的次数。
假设 term = 51,number = 164518351,因此 51 确实在 number 中存在,并且出现了 2 次,因此返回 2。
我的解决方案 - 将数字和术语转换为字符串,并将术语字符串替换为数字字符串中的“A”,然后最后统计数字字符串中“A”的数量。他要求我不使用字符串来解决,所以我给出了数组方法。
但他说我也不能使用数组。所以我想知道是否还有其他方法可以做到这一点?我不需要确切的代码或算法,我只想知道我们可以采取的各种方法来以最小的时间复杂度解决这个问题。
最佳答案
你可以尝试这样的事情
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,则表示该 number 中没有出现该 term
希望这有帮助。
P.S - 由于 OP 不需要确切的答案,因此解决方案在语法上可能不正确。只是逻辑。
关于java - 不使用数组在另一个数字中查找一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37712109/