劍指offer全套解答 劍指offer 46 55

2021-10-10 13:42:59 字數 3901 閱讀 7970

46.孩子們的遊戲(圓圈中最後剩下的數)

​ 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m-1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下乙個小朋友開始,繼續0…m-1報數…這樣下去…直到剩下最後乙個小朋友,可以不用表演,並且拿到牛客名貴的「名偵探柯南」典藏版(名額有限哦!!_)。請你試著想下,哪個小朋友會得到這份禮品呢?(注:小朋友的編號是從0到n-1)

public

class

solution

list

res=

newarraylist

<

>()

;for

(int i=

0;i)int index=-1

;while

(res.

size()

>1)

return res.

get(0)

;}}

47.求1+2+3+…+n

​ 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。

public

class

solution

}

48.不用加減乘除做加法

​ 寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。

public

class

solution

return num2;

}}

49.把字串轉換成整數

​ 將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是乙個合法的數值則返回0

public

class

solution

boolean flag=

true

;int index=0;

if(str.

charat

(index)

=='+'

)else

if(str.

charat

(index)

=='-'

)int sum=0;

for(

int i=index;ilength()

;i++

)int p = str.

charat

(i)-

'0';

if(flag&&

((sum==integer.max_value/

10&&p>7)

||sum>integer.max_value/10)

)if(!flag&&((

-sum==integer.min_value/

10&&p>8)

||-sum) sum=sum*

10+p;

}return flag?sum:

-sum;

}}

50.陣列中重複的數字

​ 在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

public

class

solution

for(

int i=

0;i)else}}

return

false;}

}

51.構建乘積陣列

​ 給定乙個陣列a[0,1,…,n-1],請構建乙個陣列b[0,1,…,n-1],其中b中的元素b[i]=a[0]a[1]…*a[i-1]a[i+1]…*a[n-1]。不能使用除法。(注意:規定b[0] = a[1] * a[2] * … * a[n-1],b[n-1] = a[0] * a[1] * … * a[n-2];)

對於a長度為1的情況,b無意義,故而無法構建,因此該情況不會存在。

public

class

solution

int[

] b=

newint

[len]

;int tmp=1;

for(

int i=

0;i) tmp=1;

for(

int i=len-

1;i>=

0;i--

)return b;

}}

52.正規表示式匹配

​ 請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配

public

class

solution

private

boolean

help

(char

c,char

p,int i,

int j)

if(memo[i]

[j]!=null)

boolean firstmatch = i(c[i]

==p[j]

||p[j]

=='.');

boolean ans;

if(j+

1=='*'

)else

memo[i]

[j]=ans?1:

-1;return ans;

}}

53.表示數值的字串

​ 請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。

public

class

solution

if(index(str[index]

=='e'

||str[index]

=='e'))

return flag&&index==str.length;

}private

boolean

isponum

(char

str)

private

boolean

isnum

(char

str)

return index>start;

}}

54.字元流中第乙個不重複的字元

​ 請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。

public

class

solution

}public

char()

else

}return

'#';

}}

55.鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

public

class

solution}if

(q==null||q.next==null)

p=head;

while

(p!=q)

return p;

}}

劍指offer全套解答 劍指offer 1 5

1.二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class solution int n array 0 length i...

劍指offer全套解答 劍指offer 36 45

36.兩個鍊錶的第乙個公共節點 輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 public class solution return p 37.數字在排序陣列 現的次數 統計乙個數字在公升序陣列 現的次數。publi...

劍指offer程式設計

二維陣列中的查詢 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,...