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;剩下的小方块数量够填充多长的列/行。