< 返回新闻公共列表
牛客网《剑指offer》专栏刷题练习之数组专精
发布时间:2023-06-28 01:00:12
一、 打印从1到最大的n位数
1、题目速览
2、个人题解
2.1、解题思路
由题目可以得知打印的结果取决于n的值且和10的倍数有密切关联:
若n为1,打印的最大值为9
若n为2,打印的最大值为99
。。。
若n为5,打印的最大值为99999
所以我们可以定义一个值为1的辅助数字,根据n的值来让辅助数字乘以不同数量的10
然后从1到辅助数字进行循环,将结果依次存入一个数组即可
2.2、代码实现
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 最大位数 * @return int整型vector */ vector
printNumbers(int n) { // write code here vectorres; int flag=1; for(int i=1;i<=n;i++) flag*=10; for(int i=1;i reOrderArray(vector& array) { // write code here if(array.size()==0||array.size()==1) return array; vectoros; vectorjs; for(int i=0;i reOrderArrayTwo(vector& array) { // write code here int i=0; while(i=array.size()) return array; int temp=array[i]; array[i]=array[flag]; array[flag]=temp; } i++; } return array; } };
2.3、代码解析
外层while循环结束的条件就是下标超过限制
找到第一个偶数时,定义辅助变量flag,并通过内层的while循环来找到第一个奇数的位置
判断flag是否超过数组限制,如果超过就说明原数组满足题目要求,return返回即可
如果没有超过限制就进行经典的交换元素操作
最后i++,继续往后遍历,超过数组限制后也要利用return返回
那么《剑指offer》专栏之数组专精的分享到此结束了,觉得写的好的朋友可以点赞鼓励一下哈,我们下篇再见!