程式設計師面試題精選

2021-08-27 01:46:51 字數 696 閱讀 7783

問題描述:輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。

問題分析:這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字串全排列,每次交換2個字元的位置,就會得到乙個新的排列。

我們以三個字元abc為例來分析一下求字串排列的過程。首先我們最後乙個字元c,然後列印字串"abc",交換"ab",列印"bac"。完成內層操作,遞迴返回之前,恢復"ab"的位置。當兩個字元ab的排列求好之後,我們把第乙個字元a和最後乙個字元c交換,得到cba,接著我們固定最後乙個字元a,求兩個字元cb的排列。輸出"cba"和"bca"後,恢復"cba",出內層遞迴,因為i>1,恢復c和a的位置,此時,字串恢復為"abc",然後再交換"b"和"c",固定b,進遞迴。依次輸出"acb"和"cab"。#include void swap(char* str,int a, int b) void arrangement(char * str, int len) if (i==len) swap(str,i-1,len-1);//進入下一層遞迴前,交換i-1和len-1位置的元素 } } int main(int argc, char** argv) 這個遞迴程式沒能解決字串中有重複字串的問題。例如:當字串為"aaa"時,則程式會輸出6個相同的"aaa"。

程式設計師面試題精選100題

今天開始各種刷面試題,沉下心來集中時間,全身心投入 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。相關概念 二元查詢樹 它首先要是...

程式設計師面試題精選 歸併排序

採用分治策略 一般有三個步驟 1 分解 將n個元素分成各含n 2個元素的子串行 2 解決 用合併排序法對兩個子串行遞迴的排序 3 合併 合併兩個已排序的子串行以得到排序結果。在歸併排序時,其長度為1時遞迴結束。單個元素被視為是已排序好的。includeusing namespace std defi...

程式設計師面試題

2013 10 12 14 05 867人閱讀收藏 舉報9月5日,華為2014校園招聘的機試題目 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複...