关注
private long temp(long n){
//平方根
long len = (long)Math.sqrt(n);
//先使用n视图拼出正方形
/**
* (len-1)个 2火柴,一个4火柴,这是一列,共有len个这样的列
*/
long res = len*(4+(len-1)*2);
//还需要多少个
long other = n-len*len;
if(other==0)return res;
if(other<=len){
//只够补一行/列
res+=3+(other-1)*2;
}else {
res+=3+(len-1)*2;//补一行
other-=len;
res+=3+(other-1)*2;//补一列
}
return res;
}
我解释一下帖主第三题的几行代码:long len = (long)Math.sqrt(n);先视图用用n个小正方行拼出最大程度的大正方形,所以开方。long res = len*(4+(len-1)*2); 在纸上画一下,len-1个“直角火柴”(2),一矩形火柴(4),组成一列,共有len个这样的列,而且(4)重合的部分会补上最后的边。long other = n-len*len; 统计还剩下几个(最多能够拼出一个完整的行或者列)。res+=3+(other-1)*2;剩下的小方块数量够填充多长的列/行。
查看原帖
点赞 1
相关推荐
牛客热帖
更多
正在热议
更多
# 简历第一个项目做什么 #
4335次浏览 69人参与
# 租房找室友 #
58159次浏览 240人参与
# MiniMax求职进展汇总 #
1548次浏览 25人参与
# 实习的你做了哪些离谱的工作 #
5560次浏览 85人参与
# 工作压力大,你会干什么? #
6569次浏览 186人参与
# 参加哪些竞赛对找工作有帮助? #
5199次浏览 107人参与
# AI让你的思考变深了还是变浅了? #
2504次浏览 81人参与
# 找实习记录 #
13823次浏览 267人参与
# 如果不上班,你会去做什么 #
3651次浏览 175人参与
# 携程工作体验 #
20659次浏览 78人参与
# 邪修省钱套路 #
4384次浏览 162人参与
# 学历对求职的影响 #
587641次浏览 4003人参与
# 为了入行xx岗,我学了__ #
3041次浏览 51人参与
# 我的付费上班经历 #
8402次浏览 139人参与
# 一上班就想____,这正常吗? #
13889次浏览 143人参与
# 如果再来一次,你还会选择这个工作吗? #
779651次浏览 6261人参与
# 职场上哪些行为很加分? #
314272次浏览 3549人参与
# 如何KTV领导 #
83370次浏览 525人参与
# 产品实习,你更倾向大公司or小公司 #
193666次浏览 2074人参与
# 实习打杂,要跑路吗 #
56228次浏览 336人参与
# 你们公司哪个部门最累? #
37496次浏览 255人参与
SHEIN公司福利 887人发布