尽快写完Math!

(1)Arranging Coins

解题思路一:这个想法是关于二次方程,得到算术和的公式是sum =(x + 1)* x / 2

所以对于这个问题,如果我们知道和,那么我们可以知道x =(-1 + sqrt(8 * n + 1))/ 2 向下取整。

代码如下:

1 public class Solution {
2     public int arrangeCoins(int n) {
3         return (int)((-1 + Math.sqrt(1 + 8 * (long)n)) / 2);
4     }
5 }

解题思路二:利用给定的n不停的减去1,2…,直至n小于要减去的数字。

代码如下:

 1 public class Solution {
 2     public int arrangeCoins(int n) {
 3         int result = 0;
 4         int add = 1;
 5         while (n >= add) {
 6             n -= add;
 7             add++;
 8             result++;
 9         }
10         return result;
11     }
12 }

(2)Factorial Trailing Zeroes

解题思路:

因为所有的trailing zero来自因子5 * 2。

但有时一个数字可能有几个5因子,例如,25有两个5因子,125有三个5因子。 在n! 操作,因子2总是充足。 所以我们只计算从1到n的所有数字中的5个因子。

计算5的个数时, 最简单的方法是 SUM(N/5^1,  N/5^2, N/5^3...)

代码一:

1 public class Solution {
2     public int trailingZeroes(int n) {
3        return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
4     }
5 }

代码二:

 1 public class Solution {
 2     public int trailingZeroes(int n) {
 3         if (n < 1) {
 4             return 0;
 5         }
 6         int number = 0;
 7         while (n / 5 != 0) {
 8             n /= 5;
 9             number += n;
10         }
11         return number;
12     }
13 }

(3)Palindrome Number

解题思路:判断一个数字是否是回文数字,不能像字符串那样一个字符一个字符比较!!!所以将数字反转如果与原数值相同就是回文数字。

代码如下:

 1 public class Solution {
 2     public boolean isPalindrome(int x) {
 3         if (x < 0) {
 4             return false;
 5         }
 6         return x == reverse(x);
 7     }
 8     public int reverse(int x) {
 9         int rst = 0;
10         while (x != 0) {
11             rst = rst * 10 + x % 10;
12             x /= 10;
13         }
14         return rst;
15     }
16 }

(4)Rectangle Area

解题思路:

找到重复部分矩形的坐标表示,两个大矩形面积相加减去重叠部分面积即可。

代码如下:

1 public class Solution {
2     public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
3         int left = Math.max(A,E), right = Math.max(Math.min(C,G), left);
4         int bottom = Math.max(B,F), top = Math.max(Math.min(D,H), bottom);
5         return (C-A)*(D-B) - (right-left)*(top-bottom) + (G-E)*(H-F);
6     }
7 }

(5)Reverse Integer

解题思路简单明了。

代码如下:

 1 public class Solution {
 2     public int reverse(int x) {
 3         int result = 0;
 4         while (x != 0) {
 5             int tail = x % 10;
 6             int newResult = result * 10 + tail;
 7             if ((newResult - tail) / 10 != result) {
 8                 return 0;
 9             }//判断是否溢出
10             result = newResult;
11             x /= 10;
12         }
13         return result;
14     }
15 }

时间: 2024-11-03 19:23:40

尽快写完Math!的相关文章

论文写完啦

已经自信到有点自大了,觉得自己的论文简直就是巨作,很完美.这次写论文我深刻体会到了完美的定义,不是天衣无缝,而是你竭尽所能的做到了最好.对我来说,我的论文就已经是完美了.可是,为什么都没人想看我的论文呢.我密了好几个人想不想看我的论文,都没回应.于是我专门改了QQ签名档.但我想还是没人会真的想看吧. 我太兴奋啦.看了下论文的word,创建日期是6/25,但我想再之前应该还是有一些草稿,不然20多天就从零到写完,也太厉害了.这期间,改了起码有三个版本.真的是天翻地覆的变化.其中又以这个礼拜的变化最

IP的计算------HDOJ杭电2206(写完脑洞大开,想象力要足够丰富)

Problem Description 在网络课程上,我学到了很多有关IP的知识.IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字). 但是粗心的我,常常将IP地址写错,现在需要你用程序来判断. Input 输入有多个c

linux下安装codeblocks及写完程序之后编译成功但无法运行的原因

一:在软件中心输入codeblocks,然后点击安装,等着装完就行了. 再按ctrl+alt+t 打开终端 输入 sudo apt-get install gcc 而后再输入sudo apt-get install g++ 最后打开codeblocks写个 helloworld 试试吧. 二:helloworld小程序写完后,也编译通过了,但是却无法运行,那么你再看看保存的地方吧,要是不是保存在linux下的文档了,而是保存在磁盘里的话就是造成不能运行的结果了,更改保存位置试试看呗. 以上仅是我

不写完不让回家的JQuery的事件与动画

在这看不见太阳的小黑屋里,苦逼的一天又开始了 好了闲话我也就不扯了,接下来我就来说说我对jQuery事件和动画的理解吧!!! 还是得再扯两句,我们敬爱的,Y老师讲完了,jQuery事件和动画,对着我们这听得一脸懵逼的人,说了一句不写完就别回家,心里咯噔一下,比被车撞都...... 一.jQuery中事件 1.如何加载DOM呢? 在常规的JavaScript代码中,我们通常使用window.onload方法对吧,而在jQuery中,使用的是$(document).ready()方法.$(docum

努力习惯不在Main里面把函数写完

就是练个手,白皮书的小东西.原题是要写N!/(M!*(N-M)!) 他是先写F(n)的N!然后F(N)/(F(M)*F(N-M))但是这样会溢出. 改一下,主要是习惯MAIN()外写函数然后调用 #include<stdio.h>int f(int n,int m){int i,sum=1;for(i=n-m;i>0;i++){sum=sum*n;n--;}return sum;}int g(int n,int m){int i,sum;for(i=1;i<=n-m;i++)sum

写完代码再写诗,是多么陶醉~

文/向右奔跑(简书作者) 原文链接:http://www.jianshu.com/p/25e07f8095a8 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". 两周前,我发起一个活动,让大家从现在开始每天记录学习的内容,可以是学习的感受感言,也可以整理学习笔记.知识点.要求就是每天都写,每天去记录. 每天坚持记录.总结,是一件不容易的事情.我以自己坚持跑步和早起为例,告诉大家怎样从一件小事开始持续坚持.也分享几篇文章,如<为什么你应该(从现在开始)写博客>等

用putty玩linux的时候由于以前用window 习惯写完东西按一下ctrl+s 保存

问题描述:用putty玩linux的时候由于以前用window 习惯写完东西按一下ctrl+s 保存,但是在putty一按下就不能再输入了.后来查找到:ctrl+s 是putty的一个命令大概是这样子:”Long long ago“ 某些旧的”哑终端“会在发送过来的数据太多,显示速度跟不上时发送一个Ctrl+s让对方等一下,然后再准备好继续显示时发送一个Ctrl+q.Putty“兼容”了这个特性.也有人说是Ctrl+s是锁定屏幕用的 .不管是怎样,当你不小心在Putty中按了Ctrl+s后再按一

写完这个排序算法,老板就叫我滚蛋…

最近贴吧有个神奇的帖子,有一程序员网友发称: 老板有毛病吧,写完排序就叫我走人,我还嫌你这 9K 工资低了呢 然后附上他的排序算法代码,如下: 他也附上了输出结果: 乍一看,没毛病呀~ 发帖人还感叹:「现在的老板真不靠谱!」 网友评论: @仰望黎明之光:这脑回路,简直是程序员界的一股清流啊,9K说的是年薪吧640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png @dunziyang:多高端呀,都用上多线程了640?wx_fmt=png @哇矢泽妮可:宝才,公司捡到鬼

作业:JavaScript(数组篇-poker)给我的徒弟出个题。。。记得早点写完,然后大家3人可以早点打牌了

吐槽一下:“今天实际上我左思右想,写个什么东西好呢!手上的笔转了半天....最后还是给自己留点余地!看着他们什么酒店管理系统,呼叫中心系统之类的....简直是把自己固定死了!感觉一撸到底的感觉!!!我们是程序员所以我觉得要思想灵活点HOHO...” 今天只是想写一篇关于JavaScript数组的一篇文章 以前我认为我已经完全把数组掌握了!但是去年面试的时候被问呆了!!瞬间感觉自己萌萌哒!!所以把书看完了不算会!所以这次为了让我的徒弟能够不再犯我当年的错误...哼哼!我决定让她来一次实战!!!不能