cari

Rumah  >  Soal Jawab  >  teks badan

Isu algoritma dengan pemisahan tatasusunan php

Belah rentetan $str = '12,34,5';
Belahkannya kepada tatasusunan $arr = [[1,3,5],[1,4,5],[2,3, 5 ],[2,4,5]];
Mencari algoritma logik PHP untuk menukar $str kepada $arr;

習慣沉默習慣沉默2739 hari yang lalu822

membalas semua(2)saya akan balas

  • 世界只因有你

    世界只因有你2017-05-16 13:10:40

    Jelaskan bahawa penggunaan global mungkin tidak kelihatan begitu elegan, tetapi di sini saya hanya menulis kaedah contoh Jika tidak terlalu mengelirukan, anda boleh mengoptimumkannya sendiri

    $str = '12,34,5';
    $arr = explode(',', $str);
    $step = $book = $result = [];
    dfs(0);
    print_r($result);
    
    
    $str = '12,34';
    $arr = explode(',', $str);
    $step = $book = $result = [];
    dfs(0);
    print_r($result);
    
    $str = '12,34,5,67';
    $arr = explode(',', $str);
    $step = $book = $result = [];
    dfs(0);
    print_r($result);
    function dfs($s)
    {
        global $arr, $step, $result, $book;
        if (!isset($arr[$s])) {
            $result[] = array_values($step);
            return;
        }
    
        for ($i = 0; $i < strlen($arr[$s]); $i++) {
            if (!isset($book[$s][$i]) || $book[$s][$i] == 0) {
                $book[$s][$i] = 1;
                $step[$s] = $arr[$s][$i];
                dfs($s + 1);
                $book[$s][$i] = 0;
            }
        }
        return;
    }

    balas
    0
  • PHP中文网

    PHP中文网2017-05-16 13:10:40

    Dua tatasusunan adalah mudah untuk digabungkan Dua bersarang untuk gelung adalah mencukupi : [[1,2],[3,4],[5]], tukarkannya kepada [[13,14,23,24],[5]], dua terakhir bersarang untuk gelung Penyelesaian, kod rujukan:

    
    $str = '12,34,5';
    $arr = [];
    foreach (explode(',', $str) as $v) {
        $arr[] = str_split($v);
    }
    
    print_r(fun($arr));
    
    function fun($arr)
    {
        if (count($arr) >= 2) {
            $tmparr = [];
            $arr1 = array_shift($arr);
            $arr2 = array_shift($arr);
            foreach ($arr1 as $v1) {
                foreach ($arr2 as $v2) {
                    $tmparr[] = $v1 . $v2;
                }
            }
            array_unshift($arr, $tmparr);
            $arr = fun($arr);
        }
        return $arr;
    }
    
    

    balas
    0
  • Batalbalas