Leecode刷题【四】

12.整数转罗马数字

在这里插入图片描述

class Solution {
    public String intToRoman(int num) {
        String[][] c= {
            {"","I","II","III","IV","V","VI","VII","VIII","IX"},
            {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
            {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
            {"","M","MM","MMM"}
        };
       StringBuilder roman=new StringBuilder();
        roman.append(c[3][num/1000%10]);
        roman.append(c[2][num/100%10]);
        roman.append(c[1][num/10%10]);
        roman.append(c[0][num%10]);
        return roman.toString();
    }
}

13.罗马数字转整数

class Solution {
    public int romanToInt(String s) {
        char[] char1= s.toCharArray();
        for (int i = 0; i < char1.length; i++) {
            switch (char1[i]){
                case 'I':
                    char1[i]=1;
                    break;
                case 'V':
                    char1[i]=5;
                    break;
                case 'X':
                    char1[i]=10;
                    break;
                case 'L':
                    char1[i]=50;
                    break;
                case 'C':
                    char1[i]=100;
                    break;
                case 'D':
                    char1[i]=500;
                    break;
                case 'M':
                    char1[i]=1000;
                    break;
            }
        }
        int sum=0;
        for (int i = 0; i < char1.length-1; i++) {
            if (char1[i]<char1[i+1]){
                sum-=char1[i];
            }else{
                sum+=char1[i];
            }
        }
        return sum+char1[char1.length-1];
    }
}

14.最长公共前缀

在这里插入图片描述

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs==null||strs.length==0) return "";
        char[] c = strs[0].toCharArray();
        int sum = Integer.MAX_VALUE;
        for(String str :strs){
            char[] temp = str.toCharArray();
            int index = 0;
            while(index<c.length&&index<temp.length){
                if(temp[index]!= c[index]){
                    break;
                }
                index++;
            }
            sum = Math.min(sum,index);
            if(sum==0) {
                return "";
            }
        }
            return strs[0].substring(0, sum);

    }
}

15.三数之和

在这里插入图片描述

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> ans =new ArrayList<>();
        for(int i=0;i<nums.length-2;i++){
            if(i==0||nums[i-1]!=nums[i]){
                List<List<Integer>> next = twosum(nums,i+1,-nums[i]);
                for(List<Integer> cur : next){
                    cur.add(0,nums[i]);
                    ans.add(cur);
                }
            }
        }
    return ans;
    }
    public static List<List<Integer>> twosum(int[] nums, int i, int target){
        int left = i;
        int right = nums.length-1;
        List<List<Integer>> temp = new ArrayList<>();
        while (left<right){
            if(nums[left]+nums[right]>target){
                right--;
            }else if(nums[left]+nums[right]<target){
                left++;
            }else {
                if(left==i||nums[left-1]!=nums[left]){
                    List<Integer> dangqian = new ArrayList<>();
                    dangqian.add(nums[left]);
                    dangqian.add(nums[right]);
                    temp.add(dangqian);
                }
                left++;
            }
        }
        return temp;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真不错鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值