oj.leetcode第一个题目

题目:给出一个非负数的整数组成的列表,例如list=[2,3,410,0],求出由这些数字组成的最大的数

第一:并不是从小到大排序就可以的额,

第二,多个0的只显示一个0,比如001显示为1,0000显示为0

第三,超过两位数的,相同部分和不同部分的比较和排序是要特别考虑的

代码如下:

print "start the Solution method !"
class Solution:
    # @param num, a list of integers
    # @return a string
    def largestNumber(self, num):
        n_len=len(num)
        if not n_len or n_len<1:
            return -1
        result=''
        if n_len==1:
            result=str(num[0])
            return result
        for i in range(n_len):
            j=i+1
            for j in range(n_len):
                com_flag=self.compareTwoNum(num[i],num[j])
                if com_flag==1:
                    num[i],num[j]=num[j],num[i]
                elif com_flag==2:
                    continue
                else:
                    return "nums error!"
        for k in range(n_len):
            if num[k]==0:
                k+=1
            else:
                break
        if k==n_len:
        	result+='0'
        for i in range(k,n_len):
            result+=str(num[i])

        return result
    def compareTwoNum(self,num1,num2):
        tmp1=str(num1)+str(num2)
        tmp2=str(num2)+str(num1)
        if tmp1>tmp2:
            return 1
        else:
            return 2so=Solution()
num=[0,0,0]
result=so.largestNumber(num)
print result
        
时间: 2024-10-28 20:49:10

oj.leetcode第一个题目的相关文章

LeetCode 第一题,Two Sum

今天早上起来去机房的路上还在想,一直不做算法题老是觉得不踏实.做做题总是让自己觉得自己真的在做做学习.... 这也算是一种强迫症吧. 那就从今天开始做做LeetCode,因为好久没做过了,所以第一题还是看了别人的题解和思路,算是找找感觉. 总的来说第一题是个水.... 题目还原 Two Sum Given an array of integers, find two numbers such that they add up to a specific target number. The fu

leetcode第一刷_Subsets II

要求子集,有非常现成的方法.N个数,子集的个数是2^N,每个元素都有在集合中和不在集合中两种状态,这些状态用[0,pow(2,N)]中每个数来穷举,如果这个数中的第i位为1,说明当前集合中包含源数组中的第i个数. 至于有没有重复的元素,大部分有重复元素的问题,都可以借助一个vis集合,里面存放所有已经求得的集合或者其他形式的解,只有少数题目会超时,哪些问题具体的说. class Solution { public: vector<vector<int> > subsetsWithD

leetcode第一刷_Permutation Sequence

这道题还挺好的,如果你的思路是每次生成一个全排列,然后累计到k次,那么停下来吧,肯定超时了亲.. 微软今年的笔试题里有一道类似的,我之前已经提到过了,是只有0和1的字符串,求第k个排列是什么样子的.这道题比那个要难一些,但是总体的思路是一样的.假设有n个数要组成排列,求第k个排列.像填表一样,从高位往地位,逐个填写.先考虑有n-1个数要组成排列,最多有(n-1)!种情况,当第n个数加入后,第n个数可以是从1增加到n的,没增加1,所包含的全排列数就会增加(n-1)!,因此,如果用k/(n-1)!,

leetcode第一刷_Unique Paths II

接着上面的问题,如果这个矩阵中有阻塞的障碍,就不能用前面的那种组合数的方法了,因为很多位置实际上是没有路的嘛. 剩下的合理解法只有dp了.跟那个求最小和的非常像,从右下角往前推算,对于一个位置(i, j),它的走法应该是(i+1, j)和(i, j+1)走法的和.对于边界条件还是有一些特殊,最后一行,从右往左,如果是0的话没有问题,等于右侧走法的个数,一旦遇到一个1,那么它以及它左边的走法都必须置成0,你可没有穿墙术. 我觉得题目明确说明了行列的个数,就是在暗示我们可以使用dp的方法,行列个数不

leetcode第一刷_Plus One

这种类似大整数的处理的问题还是比较常见的,这道题应该是非常简单的版本. 题目的要求是这样的,输入的vector靠前的位置是数字的高位,因此应该先求出长度,然后从后面往前算.维护一个变量保存进位,这我就不说了.结果的vector怎么办呢?因为最后有可能有个总的进位,比如999加1,结果的vector会比输入的多出一位,因此结果还是从前往后存简单一些.最后如果有进位,就多push_back一个1,然后reverse一下就行了,我当时不知道这个函数,所以又献丑了. class Solution { p

leetcode第一刷_Valid Number

又是那种看上去非常简单,但非常难过的问题,主要是所有的测试用例很难考虑全面.下面我列举出所有的情况: 1. 字符串前面是可以含有空格的,但是全部都是空格是不行的. 2. 一个数字开头可以是哪些字符呢?很容易想到的是"+"和"-",但是别忘记还有小数点. 3. 一个数字中间也是可以含有字符的,比如科学计数法的"e",而且e之后是可以接"+"或者"-"的.但是要注意e是不是作为数字的开头或者结尾的. 4. 一个

leetcode第一刷_Rotate List

我提交了好多次,错误莫名其妙的,到后来才明白过来,原来我把题目给理解错了. 这个题的意思不是说让你把最后的那k个位置的元素移到前面来,这种问题的做法就是用两个指针,先让一个走,走到一定的长度之后两个一起走,很简单.它实际的意思是整个链表循环右移,假设一个链表长度是N,那么循环右移N次之后,链表又变回了原来的样子.k的取值范围只说了是非负的,也就是它可以是大于N的,因此实际的移位次数只是(k%N)而已. 代码就不多说了,很简单. class Solution { public: ListNode

leetcode第一刷_Text Justification

这个题的接受率好低,搞得我一直不敢做.后来认真的看了一下题目,不是很难嘛,字符串的题目ac率就是低,除了难,还因为它的测试用例太多. 思路不难,主要是因为特殊情况太多.纯模拟,我把所有的情况罗列一下,仔细一点的话就能写好了. 1. 当word为空,也就是""时,应该返回一行跟L数目相等的空格.这种情况需要提前判断和处理. 2. 当当前行不是最后一行时,应该尽可能多的放单词,单词不能截断,在这一行上,单词应该分布的尽可能均匀,且要把这一行填满,效果就跟word排版里面的撑满整行很像.怎样

leetcode第一刷_Minimum Window Substring

好题,字符串,线性时间. 我觉得第一次拿到这个题的人应该不会知道该怎么做吧,要么就是我太弱了..先搞清楚这个题要求的是什么.从一个长字符串中找一个字串,这个字串中的字符完全包含了另一个给定目标串中的字符,且这个字串的长度要求最小.还有一个非常重要的简化,题干指明了要求这种最短字串只有一个,这个限制其实暗示了这道题的整体思路,只要找到一个长串,然后缩减到不能缩减即可. 从题目的要求出发可以发现,这道题对于字符串中字符的顺序是没有要求的,因此可以很自然的想到用hash表来保存目标串中的每个字符的个数