我正在解决一个编程问题(先反转数组,然后反转数组。)它反转它,但不反转它。
给出一个二进制矩阵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;
}
}
答案 0 :(得分:1)
您可以使用array_map和array_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
)
)
答案 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)
,因为它不会创建任何新的数组,但是我对此可能是错误的。