劍指Offer第12題(列印1到最大的n位數)

2021-09-29 21:48:32 字數 2411 閱讀 5310

(本部落格旨在個人總結回顧)

題目描述:

輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印1、2、3一直到最大的3位數即999。

解題思路:

看似特別簡單的題目,越是面試官挖坑給你跳。因為題目的解法真的特別簡單,根本就沒有面試的需要。

一般這樣看似簡單的問題,但沒有規定數字範圍,往往就是考大數問題,大數問題一般可用字元解決。

解法一:(使用字串模擬加法)

#include "stdafx.h"

#include using namespace std;

/* * @name incrementstr

* @brief 以字串表示的數字加1(字串逆序存放數字)

* @return bool

*/bool incrementstr(char* strnumber, int n)

int nlength = n;

int nindex = 0;

bool bnextaddone = true;//下一位是否加1

while (bnextaddone)

}else if (strnumber[nindex] < '9' && strnumber[nindex] >= '0')

else

}

return true;}/*

* @name printreversestr

* @brief 反向列印字串

* @param [in] const char * const str

* @return void

*/void printreversestr(const char* const str)

int nlength = strlen(str) - 1;

while (nlength >= 0)

cout << endl;}/*

* @name printmaxofndigits

* @brief 從1列印到最大n位數。

* @param [in] int n

* @return bool

*/bool printmaxofndigits(int n)

char *strnumber = new char[n+1];

memset(strnumber, '\0', n + 1);

while (incrementstr(strnumber, n))

return true;

}int _tmain(int argc, _tchar* ar**)

執行結果:

解法二:(遞迴實現數字排列)

#include "stdafx.h"

#include using namespace std;

/* * @name printrecursion

* @brief 遞迴輸出0~9的n位數全排列

* @param [in] char * strnumber 存放排列結果

* @param [in] int nindex 當前修改位數

* @param [in] int n n位數

* @return void

*/void printrecursion(char* strnumber, int nindex, int n)

for (int i = 0; i < 10; i++)

}/** @name printmaxofndigits

* @brief 從1列印到最大n位數。(遞迴實現)

* @param [in] int n

* @return bool

*/bool printmaxofndigitsrecursion(int n)

char *strnumber = new char[n + 1];

memset(strnumber, '0', n);

strnumber[n] = '\0';

printrecursion(strnumber, 0, n);

delete strnumber;

return true;

}int _tmain(int argc, _tchar* ar**)

執行結果

劍指Offer 第1題

問題 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。暴力法 分析 直接遍歷一遍陣列,即可判斷目標target是否存在。複雜度分析 時間複雜度 o n 2 因...

劍指offer 列印1到最大n位數

面試題12 題目 輸入數字n,按照順序答應出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的三位數即999。對於這道題進行時,咱們會進行一些分析,當你輸入3時,最大的三位數是999,這就是說這個最大的數是9 10 n 1 9 10 n 2 9 10 0。所以在這我想學習c語言的初...

劍指offer 第15 16題

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。coding utf 8 classsolution defnumberof1 self,n write code here count 0 ifn 0 n n 0xffffffff whilen count 1 n n 1 n re...