一. 前言
已经本科毕业了,才开始弄leetcode,说实话比较晚了,接下来我会一直每天做几道算法题,充实自己的知识点。
二. 两数之和
这是easy类型的第一道题,我居然花了半个小时,其实用idea几分钟就写出来了,但是在leetcode网页界面搞了半天,第一次接触这个界面,我鼓捣了半天,发现没有main主函数也可以编译,自动给你输入数值,传递给实参。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a = new int[2];
for(int i = 0; i < nums.length; i++){
for(int j = i+1; j < nums.length; j++){
if(nums[i] + nums[j] == target){
a[0] = i;
a[1] = j;
}
}
}
return a;
}
}
解题思路也是很简单的,嵌套循环遍历就可以
三. 整数反转
刚拿到这道题目,我脑中是这么思考的:先把整数转换成字符串,然后利用charAt()将字符串分割到数组,然后利用循环将数组中的数字反转,最后连接数组中的数字,其实很麻烦,因为涉及到数字到字符串再到数字
简单的思路就是直接数字操作!
class Solution {
public int reverse(int x) { //123
long rs = 0;
while(x != 0){
rs = rs * 10 + x % 10;
x /= 10;
}
//判断溢出
return (rs<Integer.MIN_VALUE || rs>Integer.MAX_VALUE) ? 0:(int)rs;
}
}
三. 回文数
需要考虑两种情况,数字的长度是奇数还是偶数,后来我画了图,其实是一样的不管奇数还是偶数,写出来的代码都是一样的,所以可以合并
比如:一串数字452631,长度是偶数,对应的字符下标应该是012345,0和5,1和4,2和3;一串数字45263,长度是奇数,对应的字符下标应该是01234,0和4比较,1和3比较
class Solution {
public boolean isPalindrome(int x) {
boolean s = true;
String a = x + "";
int length = a.length();
for(int i =0; i<length/2; i++)
{
if(a.charAt(i) != a.charAt(length-1-i))
s = false;
}
return s;
}
}
!](https://img-blog.csdnimg.cn/20201115133852590.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAxNDAz,size_16,color_FFFFFF,t_70#pic_center)
四. 罗马数字转整数
一开始看到这道题目的时候,我是懵逼的,因为以前没碰到过,但是后来在评论区看到大神解析了一下这道题目就明朗很多,首先得观察这道题目的规律,前面的单个字符还是很容易,后面的两个字符组合是对应的单个字符减去某个数,而且这些数字都是有规律的,比如5,50,500到4,40,400。
重点:整段代码可以这么设计,先单个字符判断,然后转换成整数并加上,加一次双字符判断,假如正好是双字符那就减去
class Solution {
public int romanToInt(String s) {
int n = s.length();
int roman_int = 0;
for(int i=0;i<n;i++)
{
switch(s.charAt(i))
{
case 'I' : roman_int = roman_int + 1;break;
case 'V' : roman_int = roman_int + 5;break;
case 'X' : roman_int = roman_int + 10;break;
case 'L' : roman_int = roman_int + 50;break;
case 'C' : roman_int = roman_int + 100;break;
case 'D' : roman_int = roman_int + 500;break;
case 'M' : roman_int = roman_int + 1000;break;
default: System.out.println("default");break;
}
if(i!=0)
//假如是双字符,那就减去双倍
{
if(((s.charAt(i)=='V')||(s.charAt(i)=='X'))&&(s.charAt(i-1)=='I'))
roman_int = roman_int-1*2;
if(((s.charAt(i)=='L')||(s.charAt(i)=='C'))&&(s.charAt(i-1)=='X'))
roman_int = roman_int-10*2;
if(((s.charAt(i)=='D')||(s.charAt(i)=='M'))&&(s.charAt(i-1)=='C'))
roman_int = roman_int-100*2;
}
}
return roman_int;
}
}