日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题整理 8 字符串排序扩展题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《劍指offer》擴(kuò)展題,

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

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


代碼:自己寫的代碼

//求字符串的所有組合 void Combination(char* pStr) {if( pStr == NULL ){return;}int nLength = strlen(pStr);if(nLength == 0){return;}//分別是1-nLength個(gè)字符的組合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 -- 源字符串的當(dāng)前位置 // m -- 從字符串中選取m個(gè)字符 // comStr -- 組合字符串當(dāng)前位置 // 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;//不選擇當(dāng)前元素Combination(pStr+1,m,comStr,resultStr);//選擇當(dāng)前元素*tempComStr = *pStr;m -= 1;Combination(pStr+1,m,tempComStr+1,resultStr);} }

(2)輸入一個(gè)包含8個(gè)數(shù)字的數(shù)組,判斷有沒有可能把這8個(gè)數(shù)字分別放在正方體的8個(gè)頂點(diǎn)上,使得正方體的三個(gè)向?qū)γ娴?個(gè)頂點(diǎn)的和都相等。

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

//是否滿足條件的標(biāo)志 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; }


總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。