随笔分类 -  数论

偏向数学问题
摘要:方法一、循环取模相加 方法二、对9取模 由于a*100+b*10+c*1=99*a+9*b+a+b+c 所以有(abc)%9=(a+b+c)%9 我们拿题目实例验证 38%9=30%9+8%9=11 11%9=2 于是有 1 class Solution { 2 public int addDigi 阅读全文
posted @ 2021-05-20 11:41 jchen104 阅读(53) 评论(0) 推荐(0)
摘要:方法一、对于循环除以2,直到结果为奇数,判断结果是否为1 时间O(logn),(这里题目已经给出了n得范围必然是int,那么logn其实必然小于31) 1 class Solution { 2 public boolean isPowerOfTwo(int n) { 3 if(n==0) retur 阅读全文
posted @ 2021-05-20 10:59 jchen104 阅读(54) 评论(0) 推荐(0)
摘要:这里我们采用计算后续n-1位的和,最后直接取反赋值给第0位元素 1 public int[] sumZero(int n) { 2 int[] ans = new int[n]; 3 int sum = 0; 4 for(int i = 1; i < n; i++) { 5 ans[i] = i; 阅读全文
posted @ 2021-05-10 11:53 jchen104 阅读(40) 评论(0) 推荐(0)
摘要:拿到题目想到了以前学过的博弈论,这里是比较简化的,对于本题,我们可以把 不同情况下先手的输赢结果列出来看。参考如下分析,我们可以得知, 当 N = 3N=3 的时候,当前做出选择的人可以拿掉最后一块石头,获得胜利;然后我们逐层向上分析,当 N = 4N=4 的时候,无论当前做出哪一种选择,对方都会赢 阅读全文
posted @ 2021-05-07 09:47 jchen104 阅读(51) 评论(0) 推荐(0)
摘要:原谅我是个数学渣渣,幸好有甜姨的解析,结论就是迭代所得的数字必然是收敛的 由此便得到了2种可能情况 (1) 收敛为1 (2) 迭代结果出现环,无法收敛 看到这两个图其实我们就想到了之前做的题目,判断链表是否存在环,用的办法是佛洛依德算法,快慢指针判断, 于是我们这里也可以用快慢指针来实现 class 阅读全文
posted @ 2021-04-21 10:16 jchen104 阅读(50) 评论(0) 推荐(0)
摘要:我们知道10=5*2,那么末尾0的个数实际上就是看2和5出现的次数,因为 只要是偶数就可以拆分成2*x,2的出现次数必然高于5,所以实际上结果 是由5的出现次数决定的。 比如25的末尾零=(1*5)(2*5)(3*5)(4*5)(5*5),在对5取余后由于25=5*5,所以实际上还有一层5, 由此可 阅读全文
posted @ 2021-04-19 10:21 jchen104 阅读(64) 评论(0) 推荐(0)
摘要:这题和之前的268. 丢失的数字 、136. 只出现一次的数字 、387. 字符串中的第一个唯一字符 有类似又有不同的地方 由于本题中的数组元素存在相同元素,有的出现2次,有的出现1次,所以不能使用异或来直接得出结果。 于是我们想到使用哈希表来构建映射关系,参考387题。 但是题目提出了进一步的要求 阅读全文
posted @ 2021-04-15 11:37 jchen104 阅读(95) 评论(0) 推荐(0)
摘要:给定二进制数,要求计算该二进制数中1的个数 小知识:二进制数与int整形10进制数是可以自动转换得,如下图 方法一: 循环检验n得每一位是否为1,时间O(k)(k为2进制数的长度,本题为32),空间O(1) public int hammingWeight(int n) { int res = 0; 阅读全文
posted @ 2021-04-12 15:18 jchen104 阅读(57) 评论(0) 推荐(0)
摘要:杨辉三角,找规律 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 我们用dp[i,j]表示第i行第j列的元素, 我们可以发现d[i,0]和ddp[i,i]始终未1, 其余元素中,存在dp[i,j]=dp[i-1,j-1]+dp[i-1,j] 找出规律后我们就可以得出如下代码,时间复杂度O 阅读全文
posted @ 2021-03-30 14:43 jchen104 阅读(233) 评论(0) 推荐(0)
摘要:复习下计算机基础《数字逻辑》的内容,异或运算 1^0=1,1^1=0,(1)两个相同元素异或结果为0,(2)0和任意元素异或结果为该元素本身 由题意得出,将0依次和数组内每个元素异或运算一次后可以得出正确结果 时间O(n),空间O(1) public int singleNumber(int[] n 阅读全文
posted @ 2021-03-29 09:58 jchen104 阅读(47) 评论(0) 推荐(0)
摘要:第一眼想到的思路是迭代,必然存在 res*res<x<(res+1)*(res+1),这样的话在n^0.5的时间内可以处理好, 于是有以下代码 public int mySqrt(int x) { int res = 0; // 必然存在 res*res<x<(res+1)*(res+1) whil 阅读全文
posted @ 2021-03-26 10:12 jchen104 阅读(95) 评论(0) 推荐(0)