题目描述:
-
给你一个整数数组 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
- 返回的结果不应包含不必要的前导零。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-multiple-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number[]} digits
* @return {string}
*/
var largestMultipleOfThree = function(digits) {
digits.sort((a,b) => a-b )
// 将数组每个元素按照被3整除 余数为1 余数为2 拆分成3个数组
let arrZero = []
let arrOne = []
let arrTwo = []
// 计算元素求和
let sum = 0
// 返回值
let result
// 将数组每个元素按照被3整除 余数为1 余数为2 拆分成3个数组
digits.forEach((element) => {
sum += element
if (element%3 == 0) {
arrZero.push(element)
}else if (element%3 == 1) {
arrOne.push(element)
}else if (element%3 == 2) {
arrTwo.push(element)
}
})
if(sum == 0){ // 如果全为0的情况
result = '0'
}else {
if (sum%3 == 0) { // 如果恰好被3整除 将数组元素从大到小排列返回即可
result = digits.reverse().join('')
}else if (sum%3 == 1) { // 如果余数为1 两种情况:1.将余数为1的数组中的最小的值移除 2.将余数为2的数组最小的两个值移除
if (arrOne.length>0) {
arrOne.shift()
result = arrZero.concat(arrOne,arrTwo).sort((a,b) => a-b).reverse().join('')
}else if (arrTwo.length>1) {
arrTwo.shift()
arrTwo.shift()
result = arrZero.concat(arrOne,arrTwo).sort((a,b) => a-b).reverse().join('')
}else {
result = ''
}
}else if (sum%3 == 2) { // 同上
if (arrTwo.length>0) {
arrTwo.shift()
result = arrZero.concat(arrOne,arrTwo).sort((a,b) => a-b).reverse().join('')
}else if (arrOne.length>1) {
arrOne.shift()
arrOne.shift()
result = arrZero.concat(arrOne,arrTwo).sort((a,b) => a-b).reverse().join('')
}else {
result = ''
}
}
}
return result
};
博客给出一个整数数组,要求按任意顺序连接其中某些数字形成3的倍数,并返回所能得到的最大的3的倍数,以字符串形式输出,若无法得到答案则返回空字符串,还给出了多个示例及相关提示。
3499

被折叠的 条评论
为什么被折叠?



