劍指Offer Java版 持續更新中

2021-09-16 14:27:26 字數 3215 閱讀 7511

public boolean find(int target, int  array) 

int rows = array.length;

int columns = array[0].length;

if(rows > 0 && columns > 0)else if(array[row][column] > target)else} }

return found;

}

public string replacespace(stringbuffer str) 

int spacecount = 0;

int length = str.length();

for(int i = 0; i < length; i++)

}int newlength = length + 2 * spacecount;

char newstr = new char[newlength];

for(int i = length - 1; i >= 0; i--)else

}return new string(newstr);

}

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值

public arraylistprintlistfromtailtohead(listnode listnode) 

stackstack = new stack<>();

arraylistres = new arraylist<>();

while(listnode != null)

while(!stack.isempty())

return res;

}

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

public treenode reconstructbinarytree(int  pre,int  in) 

treenode root = new treenode(pre[0]);

int len = pre.length;

int inorderpos = 0;

for(;inorderpos < in.length; inorderpos++)

}int lefttreelength = inorderpos;

int leftinorder = new int[lefttreelength];

int leftpre = new int[lefttreelength];

for(int i = 0; i < lefttreelength; i++)

int righttreelength = len - lefttreelength - 1;

int rightinorder = new int[righttreelength];

int rightpre = new int[righttreelength];

for(int i = 0; i < righttreelength; i++)

treenode left = reconstructbinarytree(leftpre, leftinorder);

treenode right = reconstructbinarytree(rightpre, rightinorder);

root.left = left;

root.right = right;

return root;

}

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

stackstack1 = new stack();

stackstack2 = new stack();

public void push(int node)

public int pop()

}return stack2.pop();

}

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

public int minnumberinrotatearray(int  array) 

int length = array.length;

int index1 = 0;

int index2 = length - 1;

int indexmid = index1;

while(array[index1] >= array[index2])

system.out.println(index1 + " ***** " + index2);

indexmid = (index1 + index2) / 2;

if(array[index1] == array[index2] && array[indexmid] == array[index1])

if(array[indexmid] >= array[index1])else if(array[indexmid] <= array[index2])

}return array[indexmid];

}public int mininorder(int array, int index1, int index2)

}return result;

}

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。

n<=39

public int fibonacci(int n) ;

if(n < 2)

int fibn = 0;

int fibnminusone = 1;

int fibnminustwo = 0;

for(int i = 2; i <= n; i++)

return fibn;

}

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

public int numberof1(int n) 

flag = flag << 1;

}return count;

}

劍指offer JAVA版題解(全)

序號 題解牛客 oj 資料結構型別 03 劍指offer 二維陣列中的查詢 二維陣列中的查詢 陣列04 劍指offer 替換空格 替換空格 字串05 劍指offer 從尾到頭列印鍊錶 從尾到頭列印鍊錶 鍊錶06 劍指offer 重建二叉樹 重建二叉樹樹07 劍指offer 用兩個棧實現佇列 用兩個棧...

劍指offer Java版 34醜數

醜數 返回第n個醜數 只包含因子 2 3 5的數稱為醜數,第乙個醜數是 1 採用輔助陣列的方法,提高時間效率 下乙個醜數一定是已有的醜數乘以2 或者 3 或者 5 得到的 public class q34 while uglyarray index3 3 uglyarray nextuglyinde...

10矩形覆蓋 劍指offer, java版

題目描述 我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2n的大矩形,總共有多少種方法?如當n 4時,用第乙個21的小矩形覆蓋最左邊時有兩個選擇 豎著放,則剩下有f 3 種可能 橫著放,則左下角必須有乙個橫著放的小矩形,此時右邊還剩下f 2 種可能 即f ...