Total Accepted: 16020 Total Submissions: 103330

 
 

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.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

会超过内存限制;把string改成char *就过了,但很难看!

    bool comp(const string& a, const string& b) {
string x = a, y = b;
int diff = x.length() - y.length();
if (diff > 0) {
char c = y[0];
y.insert(y.end(), diff, c);
} else if (diff < 0) {
char c = y[0]; //lastChar(x);
x.insert(x.end(), -diff, c);
}
for (int i = 0; i < x.length(); i++) {
if (x[i] < y[i]) return false;
if (x[i] > y[i]) return true;
}
return comp(a+b, b+a);
} class Solution {
public:
string largestNumber(vector<int> &num) {
int len = num.size();
string* snum = new string[len];
for (int i = 0; i < len; i++) {
snum[i] = to_string(num[i]);
} stable_sort(snum, snum + len, comp);
string ret;
int i = 0;
for (; i < len && snum[i] == "0"; i++);
for (; i < len; i++)
ret += snum[i];
return ret.empty() ? "0" : ret;
}
};

把string改成char*

    #define MAX_BUF 10
bool comp(char* a, char* b) {
char* x = a, *y = b;
char *short_, c[2];
int diff = strlen(x) - strlen(y);
short_ = diff > 0 ? y : x;
sprintf(c, "%c", short_[0]);
for (int i = 0; i < abs(diff); i++)
strcat(short_, c);
int len = strlen(x);
auto restore = [&]() {
for (int i = 0; i < abs(diff); i++)
short_[len - 1 - i] = '\0';
};
for (int i = 0; i < len; i++) {
if (x[i] < y[i]) {
restore();
return false;
}
if (x[i] > y[i]) {
restore();
return true;
}
}
restore();
if (strlen(x) == strlen(y)) return false;
char temp1[MAX_BUF*2], temp2[MAX_BUF*2];
sprintf(temp1, "%s%s", a, b);
sprintf(temp2, "%s%s", b, a);
return comp(temp1, temp2);
}
class Solution {
public:
string largestNumber(vector<int> &num) {
int len = num.size(); char** snum = new char*[len];
for (int i = 0; i < len; i++) {
snum[i] = new char[MAX_BUF];
sprintf(snum[i], "%d", num[i]);
}
sort(snum, snum + len, comp);
string ret;
int i = 0;
for (; i < len && strcmp(snum[i],"0") == 0; i++);
for (; i < len; i++)
ret += snum[i];
return ret.empty() ? "0" : ret;
}
};

重点来了,用python只需要几行

class Solution:
# @param num, a list of integers
# @return a string
def largestNumber(self, num):
num = sorted([str(x) for x in num], cmp = self.compare)
ans = ''.join(num).lstrip('0')
return ans or '0' def compare(self, a, b):
return [1, -1][a + b > b + a]

最新文章

  1. 数据可视化-EChart2.0.0使用中遇到的2个问题
  2. 几个opencv 的iOS的编译问题解决
  3. [New Portal]Windows Azure Virtual Machine (14) 在本地制作数据文件VHD并上传至Azure(1)
  4. (转) Lambda表达式中的表达式lambda和语句lambda区别
  5. 集合的知识点梳理(List,Set,不包含泛型)
  6. Mybatis学习(叁)
  7. Java之文件的随机访问和读写RandomAccessFile
  8. Oracle 执行计划(Explain Plan)
  9. jquery的冒泡和默认行为
  10. grep使用技巧一:模式pattern为字符串文件
  11. 第八届蓝桥杯B组java第四题
  12. Java实现递增数组的二分查找
  13. [物理学与PDEs]第2章习题9 粘性流体动能的衰减
  14. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest
  15. 剑指offer 2.字符串 替换空格
  16. 限流——spring-cloud-zuul-ratelimit
  17. C# redis简单的使用
  18. gc图波峰波谷一直上升问题
  19. 【SqlServer】Sql Server 支持的数据类型
  20. Javac语法糖之EnumSwitch

热门文章

  1. stringUtils是apache下的Java jar补充包
  2. Java学习笔记之:Java String类
  3. Mysql:常用代码
  4. java--面向接口编程
  5. Java内部类总结 分类: 原理 2015-06-28 09:51 9人阅读 评论(0) 收藏
  6. ggplot2 demo
  7. Error running app: Instant Run requires &#39;Tools | Android | Enable ADB integration&#39; to be enabled.解决办法
  8. Android开发之MD5加密
  9. JasperReports+iReport打印为excel表头重复问题解决
  10. PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different 2012-04-11 13:01