给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。

由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。

如果无法得到答案,请返回一个空字符串。

示例 1:

输入:digits = [8,1,9]
输出:"981"

示例 2:

输入:digits = [8,6,7,1,0]
输出:"8760"

示例 3:

输入:digits = [1]
输出:""

示例 4:

输入:digits = [0,0,0,0,0,0]
输出:"0"

提示:

  • 1 <= digits.length <= 10^4
  • 0 <= digits[i] <= 9
  • 返回的结果不应包含不必要的前导零。

C++

class Solution {
public:string largestMultipleOfThree(vector<int>& digits) {map<int,int> tmp;int n=digits.size();int sum=0;for(int i=0;i<n;i++){tmp[digits[i]]++;sum+=digits[i];}string res;if(0==sum){return "0";}if(1==sum%3){if(tmp.find(1)!=tmp.end()){tmp[1]--;sum-=1;}else if(tmp.find(4)!=tmp.end()){tmp[4]--;sum-=4;}else if(tmp.find(7)!=tmp.end()){tmp[7]--;sum-=7;}else if(tmp.find(2)!=tmp.end() && tmp[2]>1){tmp[2]-=2;sum-=4;}else if(tmp.find(2)!=tmp.end() && tmp.find(5)!=tmp.end()){tmp[2]--;tmp[5]--;sum-=7;}else if(tmp.find(5)!=tmp.end() && tmp[5]>1){tmp[5]-=2;sum-=10;}else if(tmp.find(8)!=tmp.end() && tmp[8]>1){tmp[8]-=2;sum-=16;}}if(2==sum%3){if(tmp.find(2)!=tmp.end()){tmp[2]--;sum-=2;}else if(tmp.find(5)!=tmp.end()){tmp[5]--;sum-=5;}else if(tmp.find(8)!=tmp.end()){tmp[8]--;sum-=8;}else if(tmp.find(1)!=tmp.end() && tmp[1]>1){tmp[1]-=2;sum-=2;}else if(tmp.find(1)!=tmp.end() && tmp.find(4)!=tmp.end()){tmp[1]--;tmp[4]--;sum-=5;}else if(tmp.find(4)!=tmp.end() && tmp[4]>1){tmp[4]-=2;sum-=8;}else if(tmp.find(1)!=tmp.end() && tmp.find(7)!=tmp.end()){tmp[1]--;tmp[7]--;sum-=8;}else if(tmp.find(4)!=tmp.end() && tmp.find(7)!=tmp.end()){tmp[4]--;tmp[7]--;sum-=11;}else if(tmp.find(7)!=tmp.end() && tmp[7]>1){tmp[7]-=2;sum-=14;}}if(0==sum){if(tmp.find(0)!=tmp.end()){return "0";}return res;}if(sum%3){return res;}for(int k=9;k>=0;k--){for(int j=0;j<tmp[k];j++){res+=k+'0';}}return res;}};

leetcode 1363 形成三的最大倍数(C++)相关推荐

  1. LeetCode 1363. 形成三的最大倍数(贪心,难)

    1. 题目 给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数. 由于答案可能不在整数数据类型范围内,请以字符串形式返回答案. ...

  2. leetcode No.15-16 三数之和相关问题

    leetcode 15. 三数之和 题目 链接:https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...

  3. LeetCode——1737. 满足三条件之一需改变的最少字符数(Change Minimum Characters to Satisfy One of Three...)——分析及代码(Java)

    LeetCode--1737. 满足三条件之一需改变的最少字符数[Change Minimum Characters to Satisfy One of Three Conditions]--分析及代 ...

  4. 刻意练习:LeetCode实战 -- Task04. 三数之和

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  5. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  6. 单调栈 leetcode整理(三)

    目录 42. 接雨水 思路分析 901. 股票价格跨度 思路 581. 最短无序连续子数组 思路一:排序+双指针 思路二:单调栈 思路三:双指针(最省时) 42. 接雨水 42. 接雨水 给定 n 个 ...

  7. LeetCode MySQL 1623. 三人国家代表队

    文章目录 1. 题目 2. 解题 1. 题目 表: SchoolA +---------------+---------+ | Column Name | Type | +-------------- ...

  8. LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 a 和 b ,二者均由小写字母组成. 一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 . 操作的最终目标是满足下列 ...

  9. leetcode系列--15.三数之和

    leetcode 第15题 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三 ...

最新文章

  1. 字节流InputStream/OutputStream
  2. 数据结构源码笔记(C语言):统计字符串中出现的字符及其次数
  3. 5.20打卡 equals()方法与“==”的区别
  4. vscode终端无法输入
  5. python模块用法教程_Python学习之asyncore模块用法实例教程
  6. android java 调用js_Android Java/JS互相调用
  7. disable jboss JMXInvokerServlet .
  8. c++之QT软件封装(windows)
  9. [shell编程] 入门基础总结 (一) (一种豁然开朗的感觉)
  10. 怎样取消QQ的热键(快捷键)
  11. Java笔记23反射,设计模式
  12. ks108x芯片使用体会
  13. 阿里云账号注销踩坑实践记录
  14. word2016撤销无效解决办法
  15. 微信公众号最佳实践 ( 9.6)地图导航
  16. 温故知新-什么是软件工程
  17. 452. 用最少数量的箭引爆气球
  18. 如何准备面试?“-80,阿里Java开发面试解答
  19. 计算机软件ghb,GHB 文件扩展名: 它是什么以及如何打开它?
  20. ✨ StarRocks 9 月社区动态

热门文章

  1. Redhat linux常用命令(全)
  2. 全盘镜像只还原c盘有影响么_系统全盘备份与还原
  3. 苹果macbook系列中哪款比较好?
  4. 推荐系统学习笔记03-矩阵分解和FM
  5. 如何做一个自动重复发消息的脚本
  6. 什么是ER图?数据库ER图基础概念整理
  7. 【安科瑞产品中心】ASJ系列智能电力继电器-安科瑞薛炯毅
  8. R语言-随机点名程序(使用runif函数)
  9. (29)打鸡儿教你Vue.js
  10. Drupal7_3: 汉化