算法题 — easy — 两数之和,整数反转,回文数,罗马数字转整数

一. 前言

已经本科毕业了,才开始弄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;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值