打开网易新闻 查看精彩图片

一个15行的除法循环,能让多少面试者当场卡壳?

我见过太多简历光鲜的候选人,在"求一个数的所有因数"这道题上栽跟头。不是不会写,是写得太绕。今天这5个基础数字算法,来自一位谷歌工程师的自动化学习笔记——全是面试高频题,但90%的人学错了顺序。

因数问题:为什么新手总爱用嵌套循环

求15的所有因数,最干净的写法只需要6行:

循环从1跑到15,每次检查"15除以i有没有余数"。余数为0,i就是因数。

核心就一句:user % i == 0。取模运算(%)在这里扮演的是"整除探测器"——能整除就放行,不能就跳过。

很多新手第一反应是写两层循环,或者先分解质因数再组合。面试官想看的不是数学功底,是你能不能一眼看穿:因数和整除判断,本来就是一回事。

输出结果:1、3、5、15。四个数,零废话。

计数器模式:从打印到统计的思维跃迁

计数器模式:从打印到统计的思维跃迁

上面那道题的变种:不问因数有哪些,只问有几个。

代码几乎没变。把System.out.println(i)换成count++,最后打印count。输出4。

打开网易新闻 查看精彩图片

这个"打印变计数"的套路,是算法面试的隐藏考点。我见过候选人能写出因数分解,却在统计环节多开一个数组存储,再遍历数长度——面试官的表情当场就变了。

计数器模式的价值在于:复用核心逻辑,只改输出方式。这种"最小改动"思维,写业务代码时同样救命。

数位拆解:除以10的魔法

数位拆解:除以10的魔法

12345有几位?别转字符串。用数学:

第一次除以10,12345→1234,计数1;

第二次,1234→123,计数2;

……直到变成0,一共5次。

循环次数=数字位数。这个等式比任何字符串操作都快,且不占额外内存。

进阶版:求各位数字之和。123→1+2+3=6。

这里要同时用两个运算符:%10取末位,/10去掉末位。像剥洋葱,一层一层往里剥。

代码结构:取末位→累加→削末位→循环。三步一个周期,直到剥光。

打开网易新闻 查看精彩图片

回文判断:反转数字的陷阱

回文判断:反转数字的陷阱

121是不是回文?最稳妥的做法是反转后比较。

但反转有坑。int类型反转可能溢出,虽然这道题限定正整数,但面试时提一句"大数场景下建议用字符串或long",是加分项。

核心公式:reverse = reverse * 10 + digit

拆解:每次把已有的反转结果左移一位(乘10),再把新取到的末位塞进去。121的反转过程:0→1→12→121。

最后比较original和reverse,相等即回文。

非回文例子:123反转成321,比较失败,输出"Not Palindrome"。

这5道题的隐藏主线

这5道题的隐藏主线

从因数到回文,看似零散,实则共用两套武器:取模运算拆数字,整除运算缩规模。

%10取末位,/10去末位,%i判整除——这三句话能覆盖80%的数字基础题。剩下的20%,不过是排列组合。

那位谷歌工程师在笔记里埋了个细节:所有代码都用了user作为变量名,而不是nnum。理由是"可读性优先,哪怕多敲几个字母"。