leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

separate_digits_in_array.c (1459B)


// 2553. Separate the Digits in an Array
#include "leetcode.h"

/*
 * given an array of positive integers 'nums', return an array 'answer' that
 * consists of the digits of each integer in 'nums'. to separate the digits of
 * an integer is to get all the digits it has in the same order.
 */

int *separateDigits(int *nums, int numsSize, int *returnSize) {
  int digit_cnt = 0, index = 0;
  for (int i = 0; i < numsSize; i++) {
    int x = nums[i];
    if (!x)
      digit_cnt++;
    else {
      while (x > 0) {
        digit_cnt++;
        x /= 10;
      }
    }
  }
  int *ans = (int *)malloc(digit_cnt * sizeof(int));
  for (int i = 0; i < numsSize; i++) {
    int x = nums[i], m = 0;
    int *tmp = (int *)malloc(10 * sizeof(int));
    if (!x) {
      ans[index++] = 0;
      continue;
    }
    while (x > 0) {
      tmp[m++] = x % 10;
      x /= 10;
    }
    for (int j = m - 1; j >= 0; j--)
      ans[index++] = tmp[j];
    free(tmp);
  }
  *returnSize = digit_cnt;
  return ans;
}

int main() {
  int n1[] = {13, 25, 83, 77}, r1[] = {1, 3, 2, 5, 8, 3, 7, 7}, rs1;
  int n2[] = {7, 1, 3, 9}, r2[] = {7, 1, 3, 9}, rs2;
  int *sd1 = separateDigits(n1, ARRAY_SIZE(n1), &rs1);
  int *sd2 = separateDigits(n2, ARRAY_SIZE(n2), &rs2);
  for (int i = 0; i < rs1; i++) {
    printf("%d ", sd1[i]);
    assert(sd1[i] == r1[i]);
  }
  printf("\n");
  for (int i = 0; i < rs2; i++) {
    printf("%d ", sd2[i]);
    assert(sd2[i] == r2[i]);
  }
  printf("\n");
}