Рубрики
Без рубрики

Как сформировать наименьшее возможное количество из данного номера в JavaScript

PraShant Yadav Как сформировать наименьшее возможное количество из данного номера в JavaScriptin в этом руководстве, мы реализуем алгоритм для формирования наименьшего возможного количества с ES6. Источник: PixabayInput: 55010 7652634Output: 10055 2345667note: преобразованный номер не должен начинаться с 0 Если у него есть как минимум

Автор оригинала: FreeCodeCamp Community Member.

Прашант Ядав

В этом руководстве мы реализуем алгоритм, чтобы сформировать наименьшее возможное количество с ES6 Отказ

Input: 55010 7652634
Output: 10055 2345667

Примечание : Преобразованное число не должно начинаться с 0, если он имеет хотя бы один ненулевой символ.

Мы собираемся использовать два разных подхода к решению этой проблемы. Все будет написано в ES6 Отказ

  • В первом подходе мы предположим, что предоставленное число находится в формате строки и решить его, используя сортировку, которая примет O (NLOGN).
  • Во втором подходе мы будем решать с числовым значением с O (D) временем, где d – количество цифр.

Используя сортировку o (nlogn).

Реализация

  • Мы преобразуем номер на массив символов, а затем отсортировать этот массив.
  • После сортировки мы проверим, будет ли первый символ в массиве 0.
  • Если это не 0, то мы присоединимся к массиву и вернем его.
  • Если это 0, то мы найду первый ненулевой номер и поменяйте его 0 и верните его.
function smallestPossibleNumber(num){
//Create a character array and sort it in ascending orderlet sorted = num.split('').sort();
//Check if first character is not 0 then join and return it if(sorted[0] != '0'){    return sorted.join('');}
//find the index of the first non - zero character let index = 0; for(let i = 0; i < sorted.length; i++){  if(sorted[i] > "0"){    index = i;    break;  } }
//Swap the indexes  let temp = sorted[0];  sorted[0] = sorted[index];  sorted[index] = temp;
//return the string after joining the characters of array return sorted.join(''); }

Запуск программы

Input:console.log(smallestPossibleNumber('55010'));console.log(smallestPossibleNumber('7652634'));console.log(smallestPossibleNumber('000001'));console.log(smallestPossibleNumber('000000'));
Output:100552345667100000000000
/*How it works  let sorted = num.split('').sort();   = ['5','5','0','1','0'].sort() = ['0','0','1','5','5']  if(sorted[0] != '0'){   // '0' != '0' condition fails     return sorted.join('');  }    //Find the index of the first non - zero character  let index = 0;  for(let i = 0; i < sorted.length; i++){     if(sorted[i] > '0'){  // '1' > '0'       index = i;      // index = 2;       break;          // break;     }  }    //swap the index  var temp = sorted[0];        sorted[0] = sorted[index];  sorted[index] = temp;    //return the string  return sorted.join('');*/

Как это работает

Сначала мы создали массив символов, таких как ['5', '5', '0', '1', 0] . Тогда мы разбираем это на [«0», «0», «1», «5», «5»] После этого мы находим первый ненулевой элемент и поменяйте его с первыми нулевыми элементами, такими как ['1', '0', '0', '5', '5'] . Теперь у нас наш самый маленький номер готов, нам просто нужно объединить их и вернуть его.

Узнайте больше о Сплит () , Сортировать () , Присоединяйтесь () Отказ

Сложность времени: o (nlogn). Космическая сложность: O (n).

Объяснение сложности времени и космического пространства

Мы создаем массив символов, который примет o (n) время. Затем сортировка массива примет o (nlogn).

После этого мы находим индекс наименьшего не нулевого номера, который может принимать O (n) в худшем случае и присоединиться к массиву для создания строки, примет o (n). Поскольку эти все операции работают один за другим. Так сложность времени является O (N + NLOGN + N + (NLOGN).

Мы создаем массив символов из строки, поэтому космическая сложность является O (n).

Используя числовое значение o (logn).

В этом подходе есть недостаток: если номер содержит только Zeros, то он вернет один нуль.

Реализация

  • Мы создадим массив номеров от 0 до 9.
  • Затем мы будем следить за цифрами, присутствующими в номере, увеличив их количество в массиве.
  • После этого мы найду самую маленькую ненулевую цифру и уменьшите его счет на 1.
  • В конце концов, мы будем воссоздать номер, организовав их в порядке возрастания и вернуть результат.
  • Это решение основано на подсчете.
function smallestPossibleNumber(num) {    // initialize frequency of each digit to Zero   let freq = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];          // count frequency of each digit in the number   while (num > 0){      let d = parseInt(num % 10); // extract last digit     freq[d]++; // increment counting     num = parseInt(num / 10); //remove last digit   }
// Set the LEFTMOST digit to minimum expect 0   let result = 0;    for (let i = 1 ; i <= 9 ; i++) {       if (freq[i] != 0) {          result = i;          freq[i]--;          break;      }    }           // arrange all remaining digits   // in ascending order   for (let i = 0 ; i <= 9 ; i++) {      while (freq[i]-- != 0){          result = result * 10 + i;       }   }        return result; }

Запуск программы

Input:console.log(smallestPossibleNumber('55010'));console.log(smallestPossibleNumber('7652634'));console.log(smallestPossibleNumber('000001'));console.log(smallestPossibleNumber('000000'));
Output:10055234566710
/* How it works   // initialize frequency of each digit to Zero   let freq = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];      // count frequency of each digit in the number   while (num > 0){      let d = parseInt(num % 10); // extract last digit     freq[d]++; // increment counting             num = parseInt(num / 10); //remove last digit   }    //After incrementing count   //freq = [2, 1, 0, 0, 0, 2, 0, 0, 0, 0]      // Set the LEFTMOST digit to minimum expect 0   let result = 0;    for (let i = 1 ; i <= 9 ; i++) {       if (freq[i] != 0) {          result = i;          freq[i]--;          break;      }    }    // result = 1     // arrange all remaining digits   // in ascending order   for (let i = 0 ; i <= 9 ; i++) {      while (freq[i]-- != 0){          result = result * 10 + i;       }   }
   //10   //100   //1005   //10055   //10055      return result*/

Сложность времени: o (nlogn). Космическая сложность: O (1).

Объяснение сложности времени и космического пространства

Мы снимаем каждую цифру из числа и увеличивая соответствующий счет в массиве, который примет O (logn). Затем мы находим наименьшее ненулевое число из массива в O (10).

После этого мы переставляем цифры для создания наименьшего числа в O (10 * logn). Сложность времени o (logn + 10+ (logn) или o (d), где d нет цифр

Мы используем постоянное пространство (массив 10 номеров), поэтому космическая сложность является O (1).

Если вам понравилась эта статья, пожалуйста, дайте ей? И поделитесь этим! Если у вас есть какие-либо вопросы, связанные с этим, не стесняйтесь спрашивать меня.

Для большего количества таких и алгоритмических решений в JavaScript следуйте за мной на Twitter Отказ Я пишу о ES6 , Реагировать, nodejs, Структуры данных и Алгоритмы на Nearnersbucket.com Отказ

Оригинал: “https://www.freecodecamp.org/news/forming-the-smallest-possible-number-from-the-given-number-in-javascript-bda790655c8e/”