leetcode1363

博客给出一个整数数组,要求按任意顺序连接其中某些数字形成3的倍数,并返回所能得到的最大的3的倍数,以字符串形式输出,若无法得到答案则返回空字符串,还给出了多个示例及相关提示。

题目描述:

  • 给你一个整数数组 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
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值