日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

面试题整理 8 字符串排序扩展题

發布時間:2025/3/21 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题整理 8 字符串排序扩展题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《劍指offer》擴展題,

(1)求字符串所有字符的組合

? 分析:同樣采取分治的思想,如果輸入n個字符,則可以構成長度為1、2...n的組合。在n個字符求長度為m的組合時,可以分解為第一個字符和其余的所有字符;如果組合包含第一個字符,則下一步從剩余的字符里選取m-1個字符;如果組合不包含第一個字符,則下一步從剩余的字符里選取m個字符。采用遞歸的方式解決。


代碼:自己寫的代碼

//求字符串的所有組合 void Combination(char* pStr) {if( pStr == NULL ){return;}int nLength = strlen(pStr);if(nLength == 0){return;}//分別是1-nLength個字符的組合for( int i=1; i<=nLength; ++i){char* resultStr = new char[i+1]; //注意空出一位放'\0'char* comStr = resultStr;Combination( pStr,i,comStr,resultStr);delete[] resultStr;} } // pStr -- 源字符串的當前位置 // m -- 從字符串中選取m個字符 // comStr -- 組合字符串當前位置 // resultStr -- 組合字符串首地址void Combination(const char* pStr, int m, char* comStr, char* resultStr) {if( m==0 ){*comStr = '\0';printf("%s\n",resultStr);return;}if( strlen(pStr) != 0 ){if( *(pStr+1)=='\0' && m==1 ){*comStr = *pStr;*(comStr+1) = '\0';printf("%s\n",resultStr);return;}char* tempComStr = comStr;//不選擇當前元素Combination(pStr+1,m,comStr,resultStr);//選擇當前元素*tempComStr = *pStr;m -= 1;Combination(pStr+1,m,tempComStr+1,resultStr);} }

(2)輸入一個包含8個數字的數組,判斷有沒有可能把這8個數字分別放在正方體的8個頂點上,使得正方體的三個向對面的4個頂點的和都相等。

????分析:首先將8個數字排序,然后判斷每個排序的數組是否滿足條件。

//是否滿足條件的標志 bool isExist = false; int existNum = 0;void GetCommutation( const int data[], int* dataPosition, int nLength) {if( nLength==0 ){/*for( int i=0; i<8; ++i ){printf("%d\t",data[i]);}printf("\n");*/int sum1 = data[0]+data[1]+data[2]+data[3];int sum2 = data[4]+data[5]+data[6]+data[7];if( sum1==sum2 ){int sum3 = data[0]+data[3]+data[4]+data[7];int sum4 = data[1]+data[2]+data[5]+data[6];if( sum3==sum4 ){int sum5 = data[2]+data[3]+data[4]+data[5];int sum6 = data[0]+data[1]+data[6]+data[7];if( sum5==sum6 ){//return true;++ existNum;isExist = true;printf("No.%d is as follow: \n",existNum);for( int i=0; i<8; ++i ){printf("%d\t",data[i]);}printf("\n");}}}//return false;}for( int i=0; i< nLength; ++i ){if( i==0 ){GetCommutation(data,dataPosition+1,nLength-1);continue;}int temp = dataPosition[i];dataPosition[i] = dataPosition[0];dataPosition[0] = temp;GetCommutation( data,dataPosition+1,nLength-1);temp = dataPosition[i];dataPosition[i] = dataPosition[0];dataPosition[0] = temp;} } // 正方體問題 bool IsEqualOf3OppositeSum(const int data[],int nLength) {isExist = false;if( data==NULL || nLength != 8){return isExist;}int* dataPosition = (int*) data;GetCommutation(data,dataPosition,8);if(!isExist){printf("not exist");}return isExist; }


總結

以上是生活随笔為你收集整理的面试题整理 8 字符串排序扩展题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。