任意程序实现一段算法

题目:
输入正整数 a,将 a 分割成若干个整数,这些整数需要满足条件:正着读反着读都一样并且不重复,然后将这些整数拼接,返回拼接后最大的整数
示例1:
输入:a = 13211

输出:32111

解释:a 分割后满足条件的数组为 [1, 2, 3, 11],数组中的元素拼接后的最大值为32111

示例2:

输入:a = 12131

输出:321311211

解释:a 分割后满足条件的数组为 [1, 2, 3, 121, 131],数组中的元素拼接后的最大值为321311211

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

各种循环暴力破解

1个月前 评论
mmxhn1258 (楼主) 1个月前

leetcode 上都是这种题直接去lecode找吧

1个月前 评论

暴力解法,坐等大佬指点

function solution(int $int): string
{
    $str = (string)$int;
    $len = strlen($str);

    $result = [];
    for ($i = 0; $i < $len; $i++) {
        $len2 = $len - $i;
        for ($i2 = 1; $i2 <= $len2; $i2++) {
            $str_tmp = substr($str, $i, $i2);

            if (isset($result[$str_tmp])) {
                continue;
            }

            if ($str_tmp === strrev($str_tmp)) {
                $result[$str_tmp] = 1;
            }
        }
    }

    $result = array_keys($result);
    rsort($result, SORT_STRING);

    // print_r($result);

    return implode($result);
}
1个月前 评论
gema

没做太多测试

    public function get($str)
    {
        //1 切割 2 判断 3 整理
        // $str = "19191276143431621";
        $arr = $this->sub($str);
        dump($arr);
        $arr = $this->sort($arr);
        dump($arr);
        dump(implode($arr));
    }

    public function sub($str)
    {
        $len = strlen($str);
        $i = 1;
        $res = [];
        while ($i <= $len) {
            $j = 0;
            while ($j < $len) {
                $tmp_str = Str::substr($str, $j, $i);
                if (strlen($tmp_str) == $i && !in_array($tmp_str, $res) && $this->check($tmp_str)) {
                    $res[] = $tmp_str;
                }
                $j++;
            }
            $i++;
        }
        return $res;
    }
    public function check($str)
    {
        $len   = strlen($str);
        $half  = floor($len / 2);
        $front = Str::substr($str, 0, floor($len / 2));
        $end   = Str::substr($str, ceil($len / 2), floor($len / 2));
        if (Str::reverse($end) == $front) {
            return true;
        }
        return false;
    }
    public function sort($arr)
    {
        return collect($arr)->sort(
            function ($one, $two) {
                $l = max(strlen($one), strlen($two));
                $i = 0;
                while ($i < $l) {
                    if (!isset($one[$i])) {
                        return -1;
                    }
                    if (!isset($two[$i])) {
                        return 1;
                    }
                    if ($one[$i] == $two[$i]) {
                        $i++;
                        continue;
                    } else {
                        return $two[$i] - $one[$i];
                    }
                }
                return  $two - $one;
            }
        )->toArray();
    }

file

1个月前 评论
pardon110

回文数+有序数列. 不过第二个示例有问题,若12131可切割成 [1, 2, 3, 121, 131], 那意味着数据源三个1可被分割成5个1了,重复消费,给出的问题没有意义,直接从大到小无限排就是了

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!