> 简洁易懂讲清原理,讲不清你来打我~

输入整数,输出对应的罗马字符串
![在这里插入图片描述](https://img-blog.csdnimg.cn/54b001c62a0d4d348c962ce7c304594f.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b7451281e2040048fd8254325862cb9.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/462fc7c349614751a2a972b47afe7036.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d752db71ef6445b6b8b4979f41f36496.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1346688d449461d914001704cc81b39.png)
简单的思路
准备好整数对应罗马的pair数组从大到小,对于输入的数字,先找最大的罗马数字也就是第一个小于输入数字的罗马数字作为最高位,输入的数字剩余量再找最大的罗马数字

精确的定义
numToRoman是[数字,罗马字符串]的的数组
arrNum是罗马数字的值
arrRoman是罗马数字
ans是数字对应的最终罗马字符串

```cpp
class Solution {
public:
string intToRoman(int num) {
pair<int,string>numToRoman[]={
{1000, "M"},
{900, "CM"},
{500, "D"},
{400, "CD"},
{100, "C"},
{90, "XC"},
{50, "L"},
{40, "XL"},
{10, "X"},
{9, "IX"},
{5, "V"},
{4, "IV"},
{1, "I"},
};
string ans;
while(num>0){
for(auto &[arrNum,arrRoman]:numToRoman){
if(num>=arrNum){
num-=arrNum;
ans+=arrRoman;
break;
}
}
}
return ans;
}
};
```

Leetcode18. 四数之和
![在这里插入图片描述](https://img-blog.csdnimg.cn/01eed92352d24ed39f1400c5d0c53d93.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/09722a6f4872406aa20bfdcedee28734.png)
详细的思路
sort,长度小于4直接返回,对于第一个元素,向右找第二个元素,leftright两侧往中间找第三第四个元素,相等continue去重,小了left++,大了right--

精确的定义
i第一个元素
j第二个元素
left第三个元素
right第四个元素
ans所有满足的四元组

```cpp
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if(nums.size()<4)return{};
vector<vector<int>>ans;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-3;i++){
if(i-1>=0&&nums[i]==nums[i-1])continue;
if((long long)nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>(long long)target)break;
if(nums[i]+nums[nums.size()-3]+nums[nums.size()-2]+nums[nums.size()-1]<target)continue;
for(int j=i+1;j<nums.size()-2;j++){
if(j-1>=i+1&&nums[j]==nums[j-1])continue;
int left=j+1,right=nums.size()-1;
while(left<right){
if(left-1>j+1&&nums[left]==nums[left-1]){
left++;
continue;
}
if(right+1<=nums.size()-1&&nums[right]==nums[right+1]){
right--;
continue;
}
if(nums[i]+nums[j]+nums[left]+nums[right]==target){
ans.push_back({nums[i],nums[j],nums[left],nums[right]});
left++,right--;
}
else if(nums[i]+nums[j]+nums[left]+nums[right]<target){
left++;
}else if(nums[i]+nums[j]+nums[left]+nums[right]>target){
right--;
}
}
}
}
return ans;
}
};
```

踩过的坑

```cpp
if((long long)nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>(long long)target)break;
```

> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

Leetcode12. 整数转罗马数字Leetcode18. 四数之和的更多相关文章

  1. LeetCode18. 四数之和

    LeetCode18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值 ...

  2. 【算法训练营day7】LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和

    [算法训练营day7]LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和 LeetCode454. 四数相加I ...

  3. [Swift]LeetCode18. 四数之和 | 4Sum

    Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...

  4. LeetCode18.四数之和 JavaScript

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...

  5. leetcode18 四数之和 双指针

    题外话: 这道题让我想起了 挑战程序设计竞赛有一个抽签问题,类似的a+b+c+d=target,可以重复使用一个数. a+b+c+d=target转化为 a+b=target-c-d.  如果只是判断 ...

  6. LeetCode第十八题-四数之和

    4Sum 问题简介:定n个整数和整数目标的数组nums,是否有元素a,b,c,d在nums中,使a+b+c+d=target? 举例: 给定数组 nums = [1, 0, -1, 0, -2, 2] ...

  7. ACM_四数之和

    四数之和 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个不同的整数,判断能否从中选4次,4个数和刚好为m.数字可重复选取. ...

  8. LeetCode:四数之和【18】

    LeetCode:四数之和[18] 题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c ...

  9. 【LeetCode】 454、四数之和 II

    题目等级:4Sum II(Medium) 题目描述: Given four lists A, B, C, D of integer values, compute how many tuples (i ...

随机推荐

  1. Usb-type-C端口实现的挑战与设计方案

    Usb-type-C端口实现的挑战与设计方案 USB Type-C port implementation challenges and design solutions USB from 1.1 t ...

  2. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

  3. Django(62)自定义认证类

    前言 如果我们不用使用drf那套认证规则,我们想自定义认证类,那么我们首先要知道,drf本身是如何定义认证规则的,也就是要查看它的源码是如何写的 源码分析 源码的入口在APIView.py文件下的di ...

  4. JUC下工具类CountDownLatch用法以及源码理解

    CountDownLoatch是JUC下一个用于控制计数的计数器,比如我需要从6开始计数,每个线成运行完之后计数减一,等计数器到0时候开始执行其他任务. public static void main ...

  5. 【九】Kubernetes 之 Service 概念图文讲解及功能演示

    Service 概念 Kubernetes Service 定义了这样一种抽象:逻辑上的一组 Pod,一种可以访问它们的策略 -- 通常称为微服务. Service 通常是通过 Label Selec ...

  6. Spring Security 快速上手

    Spring Security 框架简介 Spring Security 说明 Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案 关于安全方面的两 ...

  7. SQL中的分组之后TOPN问题

    SQL分组查询然后取每一组的前N条数据 由于SQL的不同的数据库SQL的语法有些略微不同,所以我们这里采用MySQL展示. 创建表 create table person(   id         ...

  8. RobotFramework + Python 自动化入门 三 (Web自动化)

    在<RobotFramwork + Python 自动化入门 一>中,完成了一个Robot环境搭建及测试脚本的创建和执行. 在<RobotFramwork + Python 自动化入 ...

  9. [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构

    [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 目录 [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 0x00 摘要 ...

  10. centos 8.3关闭防火墙,设置开机启动禁用防火墙

    关闭防火墙 [root@bogon ~]# systemctl stop firewalld      开机禁用防火墙 [root@bogon ~]# systemctl disable firewa ...