[剑指-33](php&python):把数组排成最小数

2019-01-08  本文已影响0人  myFamily329
说明:记录刷剑指offer,使用php与python两种语言,对解题思路以及涉及到的基本语法以及知识点做学习记录。其中对于每道题目进行粗略的分类。
题目来源
题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

解题思路(参考剑指offer 第二版)
注意点:
编程实现
PHP
<?php
运行时间:70ms

占用内存:2752k
function PrintMinNumber($numbers)
{
    if(empty($numbers) || count($numbers) <= 0){
        return "";
    }
    usort($numbers, 'ReSorted');
    $res = "";
    for($i = 0; $i < count($numbers); $i++){
        
        $res .= $numbers[$i];
    }
    
    return $res;
    
}
function ReSorted($str1, $str2){
    $strA = $str1.$str2;
    $strB = $str2.$str1;
    // 如果第一个数大于第二个数 1 
    return ($strA < $strB)? -1 : 1 ;
}
    
var_dump(PrintMinNumber(array(3, 32, 321)));
?>
Python
运行时间:30ms

占用内存:5728k
# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if not numbers:
            return ''
        string = [str(num) for num in numbers]
        string.sort(self.theMax,reverse=False)
        return ''.join(string)
           
    def theMax(self,str1,str2):
        str1str2 = str1+str2
        str2str1 = str2+str1
        return 1 if str1str2 > str2str1 else -1

#另一种方法
# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        if not numbers or len(numbers) <= 0:
            return ''
        
        compares = lambda x, y : cmp(str(x) + str(y), str(y) + str(x))
        # python2.7
        min_string = sorted(numbers, cmp = compares)
        return ''.join(str(s) for s in min_string)
s = Solution()
print(s.PrintMinNumber([3, 32, 321]))
知识总结复习
  1. php默认排序函数
  1. php字符串的拼接
  1. python 数值转换为字符串函数
  1. python匿名函数 lambda()
    参考学习:https://www.cnblogs.com/hf8051/p/8085424.html
  2. python排序函数sort() 与 sorted()
上一篇 下一篇

猜你喜欢

热点阅读