本文主要是介绍leetcode:LCR 135. 报数.剑指offer打印从1到最大的n位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实现一个十进制数字报数程序,请按照数字从小到大的顺序返回一个整数数列,该数列从数字 1
开始,到最大的正整数 cnt
位数字结束。
示例 1:
输入:cnt = 2 输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
知识点:
calloc
是 C 语言标准库中的一个函数,用于动态地分配内存空间,并将该内存空间初始化为零。它在使用动态内存分配时非常有用,特别是当需要确保分配的内存块的每个字节都是零时。
calloc
的函数原型如下:
void *calloc(size_t num_elements, size_t element_size);
参数解释:
num_elements
:要分配的元素数量。
element_size
:每个元素的大小(以字节为单位)。
atoi
是 C 语言标准库中的一个函数,用于将字符串转换为整数。函数名称 atoi
代表 "ASCII to Integer",它将字符串中的数字字符转换为对应的整数。
字符串实现大数输出
索引index从0开始,字符串长度小于n,
//回溯
void DFS(char** nums,char* str,int end,int index,int* returnSize)
{if(index==end){nums[(*returnSize)] = malloc(sizeof(char)*(end+1));//去零,此处需要判断是否全为0,把多余的0去掉while(str[0]=='0')str++;//非0的部分加入。if(str[0]!=0)strcpy(nums[(*returnSize)++],str);return;}for(int i=0;i<=9;i++){str[index] = i+'0';//必须有结束符,不然strcpy越界str[index+1] = '\0';DFS(nums,str,end,index+1,returnSize);}}
int* countNumbers(int cnt, int* returnSize){* returnSize = 0;int* nums_c = calloc(pow(10,cnt),sizeof(int));char** nums = malloc(sizeof(char*)*(pow(10,cnt)+1));char* str = malloc(sizeof(char)*(cnt+1));DFS(nums,str,cnt,0,returnSize);//字符串转化for(int i=0;i<*returnSize;i++){nums_c[i] = atoi(nums[i]);}return nums_c;
}
使用递归的思想,依次构建个位、十位、百位……
这篇关于leetcode:LCR 135. 报数.剑指offer打印从1到最大的n位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!