LintCode 371 用遞迴列印數字

2021-08-05 23:50:32 字數 1798 閱讀 5961

用遞迴的方法找到從1到最大的n位整數。

注意事項

用下面這種方式去遞迴其實很容易:

recursion(i)
但是這種方式會耗費很多的遞迴空間,導致堆疊溢位。你能夠用其他的方式來遞迴使得遞迴的深度最多只有 n 層麼? 樣例

給出n = 1, 返回[1,2,3,4,5,6,7,8,9].

給出n = 2, 返回[1,2,3,4,5,6,7,8,9,10,11,...,99].

第一種:

用字串模擬數字

class solution 

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

//bool flag = false;

number[n] = '\0';

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

delete number;//new 完後要記得釋放記憶體

return numarr;

} void recursion(vector&numarr,char * num,int length ,int index)

return;

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

return;//這裡之前忘記寫return了,這個是計算完第i位(i+1位後面的也計算完返回了,如果不加return,直接停在這一層,所以不會繼續返回到第i-1位的計算當中)

}};

第二種:

遞迴的深度最多只有n層,說明每一位是一次遞迴,其實也就是先把i-1層的都算出來,再計算第i層的就行

class solution ;  

return ret;

} else

} return ret;

} }

};

第三種:

做法類似於列印全排列,走一遍全排列的列舉樹,從最高位開始一位一位地遍歷,直到最低位形成乙個數字,每一位都有0~9(十叉樹)

class solution ;  

vectorret; //當前層的結果

vectortmp=numbersbyrecursion(n-1); //取用上一層的結果

copy(tmp.begin(),tmp.end(),back_inserter(ret)); //放進當前層中

for(int i=1;i<=9;++i)

return ret;

}};

第四種:

class solution 

void dfs(vector& nums, int n, int cur)

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

}};

第五種:

遞迴使得遞迴的深度最多為n。將1-10定為一層,10-100定為一層,那麼輸入n,最多就迴圈n層。

class solution

return print(1,n); //列印從1開始的n位數

}vectorprint(int i, int n){

if( n>=1 ){ //依次將1-9,10-99,100-999放入容器內

int max = i*10;

for(int j=i; j

lintcode 用遞迴列印數字

遞迴的方法找到從1到最大的n位整數。樣例給出n 1,返回 1,2,3,4,5,6,7,8,9 給出n 2,返回 1,2,3,4,5,6,7,8,9,10,11,99 注意用下面這種方式去遞迴其實很容易 recursion i 但是這種方式會耗費很多的遞迴空間,導致堆疊溢位。你能夠用其他的方式來遞迴使...

Lintcode 用遞迴列印數字

用遞迴的方法找到從1到最大的n位整數。注意事項 用下面這種方式去遞迴其實很容易 recursion i 但是這種方式會耗費很多的遞迴空間,導致堆疊溢位。你能夠用其他的方式來遞迴使得遞迴的深度最多只有 n 層麼?樣例 給出 n 1,返回 1,2,3,4,5,6,7,8,9 給出 n 2,返回 1,2,...

LintCode 用遞迴列印數字

用遞迴的方法找到從1到最大的n位整數。樣例 給出n 1,返回 1,2,3,4,5,6,7,8,9 給出n 2,返回 1,2,3,4,5,6,7,8,9,10,11,99 挑戰 用遞迴完成,而非迴圈的方式。方法一 迴圈輸出 最大的數為10 n 1 class solution for int j 1 ...