面试题整理 8 字符串排序扩展题
生活随笔
收集整理的這篇文章主要介紹了
面试题整理 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 字符串排序扩展题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题整理8 字符串的排列
- 下一篇: 动态链接库和静态库的区别