题目29:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
if not numbers:
return ""
arr = [str(x) for x in numbers]
arr.sort(lambda x,y:cmp(x+y, y+x))
return ''.join(arr)
题目30:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
if index <= 0:
return 0
if index == 1:
return 1
t2, t3, t5 = 0, 0, 0
ans = [1]
for i in range(1, index):
ans.append(min(ans[t2]*2, ans[t3]*3, ans[t5]*5))
if ans[i] == ans[t2]*2:
t2 += 1
if ans[i] == ans[t3]*3:
t3 += 1
if ans[i] == ans[t5]*5:
t5 += 1
return ans[index-1]
题目31:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
# -*- coding:utf-8 -*-
class Solution:
def FirstNotRepeatingChar(self, s):
if not s:
return -1
s_list = [i for i in s]
num = len(s_list)
try:
for i in range(num):
if s_list.count(s_list[i]) == 1:
return i
except:
return -1