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

输入整数,输出对应的罗马字符串
![在这里插入图片描述](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. NVIDIA安倍架构

    NVIDIA安倍架构 NVIDIA Ampere ArchitectureNVIDIA The Heart of the World's Highest-Performing, Elastic Dat ...

  2. GPU微观物理结构框架

     GPU微观物理结构框架 一.CPU 和 GPU 在物理结构和设计上有何区别 首先需要解释CPU(Central Processing Unit)和GPU(Graphics Processing Un ...

  3. JAVA并发(6)-并发队列ArrayBlockingQueue

    本文讲ArrayBlockingQueue 1. 介绍 一个基于数组的有界阻塞队列,FIFO顺序.支持等待消费者和生产者线程的可选公平策略(默认是非公平的).公平的话通常会降低吞吐量,但是可以减少可变 ...

  4. NX二次开发-获取WCS坐标系的原点坐标和矩阵标识

    函数:UF_CSYS_ask_csys_info() 函数说明:获取工作坐标系对象的标识符. 用法: #include <uf.h> #include <uf_csys.h> ...

  5. 【NX二次开发】按层查找工作部件中的对象 UF_LAYER_cycle_by_layer

    第一次调用 :返回第一个启用层中的第一个对象. 第二次调用 :返回下一个已启用层中的下一个对象. 最后一次调用:当所有对象都被耗尽时,将返回object_tag = NULL_TAG. 在循环数据库时 ...

  6. 6.7考试总结(NOIP模拟5)

    前言 昨天说好不考试来着,昨晚就晚睡颓了一会,今天遭报应了,也没好好考,考得挺烂的就不多说了. T1 string 解题思路 比赛上第一想法就是打一发sort,直接暴力,然后完美TLE40pts,这一 ...

  7. NOIP模拟测试20「周·任·飞」

    liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数=联通块数 前缀和维护边 ...

  8. Java安全之Weblogic内存马

    Java安全之Weblogic内存马 0x00 前言 发现网上大部分大部分weblogic工具都是基于RMI绑定实例回显,但这种方式有个弊端,在Weblogic JNDI树里面能将打入的RMI后门查看 ...

  9. 三剑客-awk

    1.作用特点 排除信息 查询信息 统计信息 替换信息 2.语法格式 awk [参数] '模式-动作' 文件 3.awk命令执行原理 4.命令使用方法 创建测试环境 [root@shuai ~]# ca ...

  10. 基于C#的socket编程的TCP同步实现

    该博客源著地址https://www.cnblogs.com/sunev/archive/2012/08/05/2604189.html 一.摘要 总结一下基于C#的TCP传输协议的涉及到的常用方法及 ...