剑指offer 面试45题
面试45题:
题:把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路一:暴力破解:先求所有数字的全排列,然后求最小值
解题代码:
# -*- coding:utf-8 -*-
import itertools
class Solution:
def PrintMinNumber(self, numbers):
# write code here
#暴力解法
if len(numbers)<=0:
return ""
str_numbers=[str(i) for i in numbers]
premu=itertools.permutations(str_numbers)
res=[''.join(i) for i in premu]
return min(res)
解题代码二:将数字转换为字符串后进行自定义排序(使得按照字符串拼接的从小到大的顺序排列)
设计比较大小的规则为 若 ab > ba 则 b应该在a前面。
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
是两两对象之间的比较,排序默认是从小到大,在这个函数内部实现的两两排序。
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
#暴力解法
if len(numbers)<=0:
return ""
str_numbers=[str(i) for i in numbers]
res=sorted(str_numbers,cmp=lambda x,y:cmp(x+y,y+x))
return ''.join(res)
剑指offer 面试45题的更多相关文章
- 剑指offer 面试5题
面试5题: 题目:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 方法一: # -*- co ...
- 剑指offer 面试8题
面试8题: 题目:二叉树的下一个节点 题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路:详见剑 ...
- 剑指offer 面试10题
面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1 ...
- 剑指offer 面试11题
面试11题: 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4 ...
- 剑指offer 面试14题
面试14题: 题目:剪绳子 题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m].请问k[0] ...
- 剑指offer 面试17题
面试17题: 题目:打印从1到最大的n位数 题:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1.2.3一直到最大的3位数999. 解题思路:需要考虑大数问题,这是题目设置的陷 ...
- 剑指offer 面试26题
面试26题: 题目:树的子结构 题:输入两棵二叉树A和B,判断B是不是A的子结构. 解题思路:递归,注意空指针的情况. 解题代码: # -*- coding:utf-8 -*- # class Tre ...
- 剑指offer 面试29题
面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...
- 剑指offer 面试32题
面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...
随机推荐
- Web Service安全问题,不暴露接口的一种办法
我们在做服务层时,经常会用到Web Service,但是这有个问题,容易被人恶意调用接口. 一种解决办法是自己写个验证SoapHeader,屏蔽接口在网页端调用,但使用这个方法别人还是能看到你的接口有 ...
- 使用Hyper-V安装Ubuntu16.04 Server 网络配置
由于最近在研究Docker, 于是需要用到虚拟机,安装Ubuntu 16.04到Hyper-V并部署Docker.这个过程中填平了几个小坑,为了大家以后遇到类似情况节省时间,我将这几个小坑的问题和解决 ...
- Linux Linux程序练习四
编写两个不同的可执行程序,名称分别为a和b,b为a的子进程. 在a程序中调用open函数打开a.txt文件. 在b程序不可以调用open或者fopen,只允许调用read函数来实现读取a.txt文件. ...
- Android-风格和主题
Android-风格和主题 一 Style和主题Theme的差别 1.Theme是针对窗口级别的,改变窗口样式 2.Style是针对窗口元素级别的.改变指定控件或者Layout的样式 二 使用Styl ...
- hdu 1815(二分+2-sat)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1815 题意:给出n个牛棚.两个特殊点S1,S2的坐标.S1.S2直连.牛棚只能连S1或S2,还有,某些 ...
- poj 1698(拆点+最大匹配)
题目链接:http://poj.org/problem?id=1698 思路:最大匹配容易想到,关键是如何建图,这里我们可以将电影按需要的天数进行拆点,然后对于可以选择的日子连边,最后只需判断最大匹配 ...
- 怎样利用JDBC启动Oracle 自己主动追踪(auto trace)
有时我们须要对运行SQL的详细运行过程做一个追踪分析,特别是在应用程序性能优化的时候.Oracle两个工具能够帮助我们做好性能分析,一个是SQL_TRACE,一个是SESSION_EVENT.SQL_ ...
- java.lang.VerifyError: Expecting a stack map frame
https://blog.csdn.net/u013066244/article/details/78434134 对于java7而言,需要添加 -XX:-UseSplitVerifier(已实践). ...
- 学生成绩管理系统【c】
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...
- Cocos2d-x Lua中帧动画
帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵的运动绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了. 在Cocos2d-x Lua中播放帧 ...