В этом вызове LeetCode нас просят преобразовать входящую строку в целое число. Теперь вы можете подумать про себя: «Но подождите, разве не для этого предназначен parseInt
? Что ж, вы были бы правы, и именно поэтому этот вопрос, как сообщается, является одним из самых нелюбимых во всем LeetCode. Это, а также тот факт, что у него очень длинный список (на мой взгляд, необоснованных) условий.
Решение №1: parseInt()
Во-первых, давайте посмотрим, как мы решим это, используя инструменты, которые дает нам JavaScript:
Это просто, элегантно, быстро и может быть упрощено до 1-4 строк в зависимости от того, насколько удобочитаемостью вы готовы пожертвовать. Но если вы спросите раздел комментариев на LeetCode, вы, вероятно, получите изрядную долю ненависти за то, что предложили это решение.
Решение № 2: Слишком много операторов if
Из-за большого количества условий, применяемых к этому вопросу, трудно придумать что-то особенно изящное. Может быть бесконечное количество начальных пробелов, но пробел после числа указывает на конец числа, даже если за ним следуют другие числа. Буквы не могут предшествовать цифре, а +
и -
могут, но не по две сразу, и не могут следовать после...
Видите здесь проблему? Ну вот проблема в коде:
Код довольно быстрый, но определенно может быть улучшен. Почему я не улучшил его? Потому что parseInt()
существует по причине… по этой причине!