【leetcode】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.
思路:
忧伤的发现,人的思路真的是很容易定型。这道题我做过的,但是过了这么久,我还是只记得我自己的老思路。
直接上正确答案, 关键是排序时比较的策略, 用s1+s2 和 s2+s1 比较即可,就是把两种方式排列的情况都试一下,看哪个大!!
class Compare{
public:
bool operator()(string s1, string s2)
{
return s1 + s2 < s2 + s1;
}
};
class Solution {
public:
string largestNumber(vector<int> &num) {
int i;
for (i = ; i < num.size(); i++)
if (num[i] != )
break;
if (i == num.size()) // All numbers are 0
return "";
vector<string> v;
for (i = ; i < num.size(); i++)
v.push_back(to_string(num[i]));
sort(v.begin(), v.end(), Compare());
string result;
for (i = v.size() - ; i >= ; i--)
result += v[i];
return result;
}
};
我自己的思路:
两个数比较 如 724 和7247 那么比较 724|724 与 7247|7247 即相同时就不断复制自己,直到遇到不同的数字得到大小。 如果两个数字同时达到末尾,但是数字一直相同,则这两个数字相同。
代码很长,但是也AC了,慢一些。主要是二分归并排序是我自己写的。
class Solution {
public:
string largestNumber(vector<int> &num) {
MergeSort(num, , num.size() - );
string ans;
for(int i = ; i < num.size(); i++)
{
stringstream ss;
ss << num[i];
string s = ss.str();
ans.append(s);
}
if(!ans.empty() && ans[] == '')
{
ans = "";
}
return ans;
}
bool islarge(int aa, int bb)
{
stringstream ss;
ss << aa;
string sa = ss.str();
ss << bb;
string sb = ss.str();
int i = , j = ;
while(sa[i % sa.length()] == sb[j % sb.length()]
&& !((i + ) % sa.length() == && (j + ) % sb.length() == )) //两边同时结束时跳出,防止相同数字无限循环
{
i++; j++;
}
return sa[i % sa.length()] > sb[j % sb.length()];
}
void MergeSort(vector<int> &in, int l, int r)
{
if(l < r)
{
int mid = (l + r) / ;
MergeSort(in, l, mid);
MergeSort(in, mid + , r);
Merge(in, l, mid, r);
}
}
void Merge(vector<int> &in, int l, int mid, int r)
{
vector<int> left(in.begin() + l, in.begin() + mid + ), right(in.begin() + mid + , in.begin() + r + );
int i = , j = , k = ;
while(i < left.size() && j < right.size())
{
if(islarge(left[i], right[j]))
{
in[l + k] = left[i++];
}
else
{
in[l + k] = right[j++];
}
k++;
}
while(i < left.size())
{
in[l + k] = left[i++];
k++;
}
while(j < right.size())
{
in[l + k] = right[j++];
k++;
}
}
};
【leetcode】Largest Number ★的更多相关文章
- 【LeetCode】Largest Number 解题报告
[LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...
- 【leetcode】Largest Number
题目简述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...
- 【LeetCode】792. Number of Matching Subsequences 解题报告(Python)
[LeetCode]792. Number of Matching Subsequences 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- 【LeetCode】673. Number of Longest Increasing Subsequence 解题报告(Python)
[LeetCode]673. Number of Longest Increasing Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https:/ ...
- 【LeetCode】Single Number I & II & III
Single Number I : Given an array of integers, every element appears twice except for one. Find that ...
- 【LeetCode】476. Number Complement (java实现)
原题链接 https://leetcode.com/problems/number-complement/ 原题 Given a positive integer, output its comple ...
- 【leetcode】Largest Plus Sign
题目如下: In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except those cells in the giv ...
- 【LeetCode】191. Number of 1 Bits 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 右移32次 计算末尾的1的个数 转成二进制统计1的个 ...
- 【LeetCode】1128. Number of Equivalent Domino Pairs 等价多米诺骨牌对的数量(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计 代码 复杂度分析 日期 题目地址:http ...
随机推荐
- 谈谈我眼中的CSDN吧
昨天逛博客园看到了这篇曝光率很高的文章:博客搬家——从CSDN到博客园,一篇短短的文章竟然招致这么多人的讨论,可能程序员就喜欢“Java好还是PHP好”这类型的问题吧,好无聊.由于我一直在使用CSDN ...
- UnicodeDecodeError: 'utf8' codec can't decode
数据库存了些中文字符, 比如'处理脚本'这样的汉字, 结果导致一个python程序报错. 下面记录处理过程和相关结论. ===========================dal.py 程序片段,p ...
- JQuery中的html(),text(),val()区别
jQuery中.html()用为读取和修改元素的HTML标签,.text()用来读取或修改元素的纯文本内容,.val()用来读取或修改表单元素的value值. 1.HTML html():取得第一个匹 ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- 如何催促Apple进行App审核
为什么提交给 App Store 的应用进入"审核(In Review)"状态后, 仍然可能会等待好多天的时间 ? 不过你也可以通过催促Apple进行App审核来缩短这个时间.以下 ...
- iOS创建子工程
实际开发中,我们可能会同时开发好几个端,比如楼主目前开发的家教平台,需要老师端,家长端,助教端三个端.有很多工具方法,或者封装的自定义控件都是可以复用的.我们就可以把公用的代码抽取出去,新建一个工程, ...
- Windows Phone 开发环境的搭建
1. 系统 系统:Windows 7(32 位).Windows 7(64 位).Windows Vista SP2(32 位)和 Windows Vista(64 位)或者更高版本. 不支持 :Wi ...
- lua操作json,mysql,redis等
==========================example for lua json======================= local cjson = require("cj ...
- Java Io 之拷贝文件性能比较
前面我们共讨论了拷贝文件有三种方式: 1. 第一种,一个字节一个字节的进行拷贝文件操作. 2. 第二种,使用字节数据批量的进行拷贝文件操作. 3. 第三种,使用带缓冲输入输出流来拷贝文件. 那么哪一种 ...
- BZOJ2229—— [Zjoi2011]最小割
0.题目大意:求两点之间的最小割,然后找出其中小于x的数量 1.分析:最小割树水题,上个板子就好 #include <queue> #include <ctime> #incl ...