Cavility CyclicRotation Javascript Решение: пустой массив возвращает ошибку - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь решить эту проблему в кодировке.Мое решение прошло все тесты, кроме одного с пустым массивом и поворотом 1 в качестве аргументов.Я так или иначе потерял, как даже подходить к решению этой проблемы.Может кто-нибудь подтолкнуть меня в правильном направленииКроме написания конкретного предложения if для проверки пустого массива.Я не могу придумать более элегантное решение.

function solution(A, K)
{
    for (i=0; i<K; i++)
    {
        A.unshift(A.pop());
    }
    return A;
}

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Еще одна альтернатива, получившая 100% по всем направлениям:

function solution(A, K) {
    const k = K % A.length; // in case the rotation is bigger than the length of the array
    if (K === 0 || k === 0) {
      return A;
    }
    const head = A.slice(0, A.length - k);
    const tail = A.slice(A.length - k, A.length);
    return [...tail, ...head];
}
0 голосов
/ 28 января 2019

Одним из решений является проверка на A.length в цикле conditions секции.

function solution(A, K)
{
    for (i = 0; i < K && A.length; i++)
    {
        A.unshift(A.pop());
    }
    return A;
}

console.log(solution([3, 8, 9, 7, 6], 3));
console.log(solution([], 5));
0 голосов
/ 28 января 2019

Альтернативным способом решения этой проблемы может быть рекурсия.В этом случае вы можете использовать оператор if, однако это служит базовым случаем для завершения ваших рекурсивных вызовов.Базовый случай здесь, если K === 0 означает, что нам больше не нужно вращать массив, а затем вернуть массив.Он также имеет другую часть, где мы возвращаем массив, если !A.length.Это означает, что если массив пуст, также верните текущий массив.

function solution(A, K) {
  if(K === 0 || !A.length) return A;
  return solution([A.pop(), ...A], K-1);  
}

console.log(solution([1, 2, 3, 4], 2)); // [3, 4, 1, 2]
console.log(solution([], 10)); // []

Выше можно переписать как однострочник, если хотите:

const f = (A, K) => K === 0 || !A.length ? A : f([A.pop(), ...A], K-1);

Вы можете визуализировать функцию выше, выполнив следующее (пустьфункция solution be f для нашего примера):

f([1, 2, 3, 4], 2) = f([4] + [1, 2, 3], 1) = f([4, 1, 2, 3], 1)

f([4, 1, 2, 3], 1) = f([3, 4, 1, 2], 0) --> [3, 4, 1, 2] // we return the array instead of another function call as K === 0 (our base case)

или когда массив пуст:

f([], 10) = [] // instantly return our array as it is empty. The clause !A.length is true (also part of our base case) which means we return A (our array) instantly.
0 голосов
/ 28 января 2019

Попробуйте это:

let solution = (A, K) => {
    for (i=0; i<K; i++){
        A.unshift(A.pop());
    }
    return A[0] != undefined ? A : [];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...