反转和反转数组

时间:2019-06-23 21:33:56

标签: php

我正在解决一个编程问题(先反转数组,然后反转数组。)它反转它,但不反转它。

问题

给出一个二进制矩阵A,我们想水平翻转图像,然后将其反转,然后返回结果图像。

水平翻转图像意味着图像的每一行都反转了。例如,水平翻转[1,1,0]会得到[0,1,1]。

反转图像意味着将每个0替换为1,并将每个1替换为0。例如,将[0,1,1]求反将得到[1,0,0]。

Example 1:

Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]

代码:

class Solution {

    /**
     * @param Integer[][] $A
     * @return Integer[][]
     */
    function flipAndInvertImage($A) {
        $B=[]; //flipped
        $i=strlen($A);

        $a=0;
        foreach($A as $item)
        { 
            $B[$a]=array_reverse($item);
            $a++;
        }
       // return $B;
        $C=[];
        for($b=0;$b<=count($B);$b++)
        {
            foreach($B[$b] as $mini)
            {
                if($mini==1)
                {
                    $C[$b]=0;
                }
                else
                    $C[$b]=1;
            }
        }
        return $C;
    }
}

4 个答案:

答案 0 :(得分:1)

您可以使用array_maparray_reverse

每个数组项首先反转数组,然后再次使用数组映射通过1 - $val翻转1和0。

$arrays = [[1,1,0],[1,0,1],[0,0,0]];

$arrays = array_map(function($array){
    return array_map(function($val) { return 1 - $val;}, array_reverse($array));
}, $arrays);

print_r($arrays);

结果

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 0
            [2] => 0
        )

    [1] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 0
        )

    [2] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
        )

)

Php demo

答案 1 :(得分:0)

function flipAndInvertImage($image) {
    $flippedImage = []; //flipped

    foreach($image as $row)
    { 
         $flippedImage[] = array_reverse($row);
    }

    $invertedImage = [];
    foreach($flippedImage as $row)
    { 
        $inverted = [];
        foreach ($row as $pixel) {
             $inverted[] = (int)(!$pixel);//reverse as bool then cast to int 
        }
        $invertedImage[] = $inverted;
    }
    return $invertedImage;
}

答案 2 :(得分:0)

类似的事情应该起作用

function flipAndInvertImage($A) {
    $reversedAndInverted  = array_map('array_reverse_and_invert', $A);
    return $reversedAndInverted ;
}

//takes a an array, invert its bits then return the revers 
function array_reverse_and_invert($arr){
    $inverts = [];
    foreach($arr as $bit) {
        $inverts[] = $bit ? 0 : 1;
    }

    return array_reverse($inverts);
}


print_r(flipAndInvertImage([[1,1,0],[1,0,1],[0,0,0]]));

答案 3 :(得分:0)

这可能不是最有效的方法,但它可能会起作用:

$input = [[1, 1, 0], [1, 0, 1], [0, 0, 0]];
foreach ($input as $key1 => $rows) {
    if ($key1 === 0) {
        $input[$key1] = array_reverse($rows);
        var_dump($input);
    } else {
        continue;
    }
    foreach ($rows as $key2 => $number) {
        if ($number === 1) {
            $input[$key1][$key2] = 0;
        } else {
            $input[$key1][$key2] = 1;
        }
    }
}

在这一行中,它将颠倒它:

$input[$key1] = array_reverse($rows);

然后它切换数字,我想这里是需要的。

添加的if将减少时间复杂度,我的猜测是空间复杂度可能为O(1),因为它不会创建任何新的数组,但是我对此可能是错误的。