LeetCode---5.MathEasy

1.题目思路

1. 7.Reverse Integer
关键词:整数每位的获取
思路:①取得符号,如果是负数转为正数方便处理。
②一次取得每一位,恰好就再拼接就正好reverse了
③特别注意溢出问题,因为这里的输入时int,所以用一个long来盛放,
最后进行判断也可以。
但是不用更大的数据类型时应该这样。
if(result > INT_MAX / 10 
|| (result == INT_MAX / 10 && num % 10 > INT_MAX % 10){
return 0;
}else{
result = result * 10 + num % 10;
}
注意:如果原来的数字末尾有0什么的,都不会造成影响。


2. 8.String to Integer (atoi)
思路:重复提一下几个要求
①排除空格
②检查正负号,只有是正负号才记录符号前进一格,否则不动。
③一个一个检查,只要不是数字break
是数字,检查溢出,没有溢出就正常搞,溢出就分别返回不同的门限值。
注意:如果正负号后面有0什么的,其实都不会造成影响。


3. 9.Palindrome Number
思路:
(1)可以利用额外空间
①将每一位放入vector里面
②首尾比较,一直到i < size / 2即可
(2)只有固定空间
①遍历求得原来数的数量级
②每次取得首位和最后一位
最后一位 num % 10
首位 num / 数量级
比较
③数量级/100,数量级 > 1
原来的数,减去最高位num = num - (num / 数量级) * 数量级
然后num = num / 10


4. 13.Roman to Integer
关键词:双指针
思路:
①找好什么字母对应多少数值。
②通过双指针判断,
后面数值比前面大,前面就是负的。
否则前面就是正的。

5. 66.Plus One
关键词:进位
思路:反向遍历,然后进位
vec[i] = vec[i] + carry;
carry = vec[i] / 10;
vec[i] = vec[i] % 10;
不要忘了,要验证carry最后的进位,进上去。


6. 67.Add Binary
关键词:进位
思路:类似于66
还是进位,不过这里的进制是二进制。
sum[i] = a[i] + b[i] + carry;
carry = sum / 2;
sum[i] = sum[i] % 2;
注意:这里由于a、b不一定具有相同长度,需要提前处理,
先就将长度不够的赋值为0,这样就能当它们一样长,进而统一处理了。


7. 168.Excel Sheet Column Title
思路:对应转换x - '@'即可。
相当于位数转换,
while(x > 0){
int cur = x % 26;
x = x / 26;
if(cur == 0){
  cur = 26;
--x;
}
result.push_back(cur + '@');
}
注意:这里的转换和十进制是不同的。
没有一个单独的字母用来表示十进制的进位10,
但是这里就是用Z来表示26进制的最高26.
所以需要对求余等于26的专门处理,
然后将原来进上去的1减下来


8. 171.Excel Sheet Column Number
思路:这个就是一个字符串转数字,而且没有什么边界条件,都是耿直的字母。
result = result * 26 + (str[i] - '@');


9. 172.Factorial Trailing Zeroes
关键词:什么产生0
思路:经过观察发现,5产生一个,5^2,5^3产生2个,3个
所以分别对于n找出各种5即可,当然5需要2,25需要4才能产生相应的0.
但是2的倍数诞生的速度比其他的数都快,所以2的倍数是充足的。
int result = 0;
for(int i = 1; pow(5, i) <= n; ++i){
result += n / pow(5, i);
}
return result;


10. 202.Happy Number
思路:
①写一个函数来求得,下一个数。
②结束条件要么为等于1,返回true
要么为出现已经出现的,肯定会无限循环,这个时候返回false
可以使用hashSet来判断,当前这个数出现过没有。


11. 204.Count Primes
思路:这个筛选法,想通了还是蛮简单的。
首先直接从2开始,遍历到sqrt(n)即可。但是没必要这样写条件。
应该写成 i * i < n
对于每一个i,将其所有的倍数都筛选掉。
对于后面的数,比如说5,要从 5*5开始,然后5*6,...
因为之前的2*5,3*5,4*5==2*10都已经被筛掉了。


12. 223.Rectangle Area
思路:分别计算各自的,然后减去重叠的。
它的输入会让你不知道哪个大,哪个小。但我们不关心这个。
我们直接对其输入取min,max就能得到小的和大的。
然后用max-min就能得到长和宽。
对于重叠面积。对于长和高分别画线段,一个线段不动,另一个线段移动。
不想交有两种情况,其余可以用一个等式来表达
length = min(x22, x12) - max(x21, x11);
高那边同理。


13. 231.Power of Two
思路:
(1)使用loop
用一个数x从1开始不断乘以二和n比较。
x的上限时x^31,如果等返回true。否则返回false。
(2)不适用loop
直接找到Int下面最大的2的power,然后对n求余。


14. 258.Add Digits
思路:
(1)按照它的计算方法进行判断。
(2)思考,它会一直变小,为什么?
因为每次有个10的时候它会将10位的1保留,算在个位。
所以每次有9的倍数,就相当于没有。
所以直接将其对9求余即可。
注意:这里和10进制又是不一样的。所以单独处理余数是0的情况,
将其改为9.


15. 263.Ugly Number
思路:每次不断求余2,3,5,如果没有一个求余能够得到0,返回false即可。


16. 326.Power of Three
思路:
(1)使用loop,和power of two一样。
让一个数在int范围内不断*3,比较即可。
(2)对数,取对数再pow上来,看一不一样。
但是double算log蛋疼地很。故不采用。
(3)找到int里面3最大的power。
然后对n求余看是否等于0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值