[LeetCode]179.Largest Number

简介:

【题目】

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

【分析】

数字转换为字符串,按字典序从大到小排序,并拼接在一起就是最大的数

【代码】

/*********************************
*   日期:2015-01-18
*   作者:SJF0115
*   题目: 179.Largest Number
*   网址:https://oj.leetcode.com/problems/largest-number/
*   结果:AC
*   来源:LeetCode
*   时间复杂度:O(n)
*   空间复杂度:O(n)
*   博客:
**********************************/
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

class Solution {
public:
    static bool cmp(const string &a,const string &b){
        string ab = a + b;
        string ba = b + a;
        return ab > ba;
    }
    string largestNumber(vector<int> &num) {
        int count = num.size();
        vector<string> vec;
        if(count == 0){
            return NULL;
        }//if
        // 整数转换为字符串
        int zeroCount = 0;
        for(int i = 0;i < count;++i){
            // 统计0的个数
            if(num[i] == 0){
                zeroCount ++;
            }//if
            char str[20];
            sprintf(str,"%d",num[i]);
            vec.push_back(str);
        }//for
        // 处理一个特殊情况 全是0的情况
        if(zeroCount == count){
            return "0";
        }//if
        // 剪枝 只有一条数据
        if(count == 1){
            return vec[0];
        }//if
        // 从大到小排序
        sort(vec.begin(),vec.end(),cmp);
        // 拼接一个最大的数
        string result;
        for(int i = 0;i < count;++i){
            result += vec[i];
        }//for
        return result;
    }
};

int main(){
    Solution solution;
    vector<int> num;
    num.push_back(3);
    num.push_back(30);
    num.push_back(34);
    num.push_back(5);
    num.push_back(9);
    // 重新排列
    string result = solution.largestNumber(num);
    // 输出
    cout<<result<<endl;
    return 0;
}


特别注意一个特殊情况:


全是0的情况,只返回一个0即可。





目录
相关文章
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
104 1
|
6月前
|
存储 SQL 算法
LeetCode 题目 65:有效数字(Valid Number)【python】
LeetCode 题目 65:有效数字(Valid Number)【python】
|
7月前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
49 0
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
39 0
|
算法
LeetCode 414. Third Maximum Number
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
97 0
LeetCode 414. Third Maximum Number
|
算法
LeetCode 405. Convert a Number to Hexadecimal
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
97 0
LeetCode 405. Convert a Number to Hexadecimal
|
API
LeetCode 375. Guess Number Higher or Lower II
我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
111 0
LeetCode 375. Guess Number Higher or Lower II
LeetCode contest 190 5417. 定长子串中元音的最大数目 Maximum Number of Vowels in a Substring of Given Length
LeetCode contest 190 5417. 定长子串中元音的最大数目 Maximum Number of Vowels in a Substring of Given Length
LeetCode Contest 178-1365. 有多少小于当前数字的数字 How Many Numbers Are Smaller Than the Current Number
LeetCode Contest 178-1365. 有多少小于当前数字的数字 How Many Numbers Are Smaller Than the Current Number
LeetCode 136. 只出现一次的数字 Single Number
LeetCode 136. 只出现一次的数字 Single Number