列表

详情


XM36. 获取n维数组的最大深度

描述

输入参数为字符串型的n维数组,数组的每一项值为数组 或 int型数字。请实现一个函数,可以获取列表嵌套列表的最大深度为多少。

输入描述

输入参数为字符串型的 n维数组,列表的每一项值为数组 或 int型数字。数组内的数组,每一项值,也可以是数组 或 int型数字。

输出描述

int型数字,表示数组嵌套的深度。

示例1

输入:

[[1], [2,3,4], [5,[2,3]], [7], [0,[1,2,3,4],3,5], [1,3], [3,2,4]]

输出:

3

说明:

n维数组的深度为3

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2021-07-19

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

const int MAX_N = 1 << 16; // 65536

int main(const int argc, const char* const argv[]) {
  char input[MAX_N] = "";
  gets(input);
  
  char stk[20];
  int top = -1, ans = 0;
  
  const char* p = input;
  while (*p) {
    switch (*p) {
      case '[':
        *(stk + ++top) = '[';
        ans = fmax(ans, top + 1);
        break;
      case ']':
        --top;
        break;
      default:
        break;
    }
    ++p;
  }
  
  assert(top == -1);
  return fprintf(stdout, "%d", ans),  0;
}

C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2019-09-03

#include<stdio.h>
int main()
{
    //字符串类型的数组,还是字符串,长得样子像数组
    char a[50000];
    int i=0;
    gets(a);//输入字符串,和scanf区别,可以有空格
    int sz=strlen(a);
    int temp=0;//用来记录深度
    int max=0;//表示最大的深度
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]=='[')//中【的个数来计算深度
        {
            temp++;
            if(temp>=max)
            {
                max=temp;
            }
        }
        if(a[i]==']')
        {
            temp--;
        }
    }
    printf("%d\n",max);
    return 0;
}

上一题