![]()
一个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的魔法
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道题的隐藏主线
从因数到回文,看似零散,实则共用两套武器:取模运算拆数字,整除运算缩规模。
%10取末位,/10去末位,%i判整除——这三句话能覆盖80%的数字基础题。剩下的20%,不过是排列组合。
那位谷歌工程师在笔记里埋了个细节:所有代码都用了user作为变量名,而不是n或num。理由是"可读性优先,哪怕多敲几个字母"。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.