在这两个整数数组中,如何确定第二个数组是否是第一个数组的旋转版本,以及需要哪个php函数?
示例:原始数组A=[1,2,3,4,5,6,7,8]旋转阵列B=[6,7,8,1,2,3,4,5]
在本例中,阵列A的所有编号都向右旋转了5个位置。
没有内置函数,但您可以为每个位置旋转并比较是否为true。
$isRotated = function (array $original, array $maybeRotated): bool {
$originalCount = count($original);
$maybeRotatedCount = count($maybeRotated);
if ($originalCount !== $maybeRotatedCount || $original === $maybeRotated) {
return false;
}
for ($i = 0; $i < $originalCount; $i++) {
$original[] = array_shift($original);
if ($original === $maybeRotated) {
return true;
}
}
return false;
};
echo $isRotated([1, 2, 3, 4, 5, 6, 7, 8], [6, 7, 8, 1, 2, 3, 4, 5]) ? 'true' : 'false', PHP_EOL;
echo $isRotated([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8]) ? 'true' : 'false', PHP_EOL;
echo $isRotated([1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 4, 5, 6, 7, 8, 1]) ? 'true' : 'false', PHP_EOL;
输出
true
false
true