Problem 16:数值的整数次方
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
boolean isNegative = false;
if(exponent < 0) {
exponent = -exponent;
isNegative = true;
}
double power = Power(base*base, exponent / 2);
if(exponent % 2 == 1)
power *= base;
return isNegative ? 1 / power : power;
}
Problem 17:打印从1到最大的n位数
public void print1ToMaxOfNDigits(int n) {
if (n <= 0)
return;
char[] number = new char[n];
print1ToMaxOfNDigits(number, 0);
}
private void print1ToMaxOfNDigits(char[] number, int digit) {
if (digit == number.length) {
printNumber(number);
return;
}
for (int i = 0; i < 10; i++) {
number[digit] = (char) (i + '0');
print1ToMaxOfNDigits(number, digit + 1);
}
}
private void printNumber(char[] number) {
int index = 0;
while (index < number.length && number[index] == '0')
index++;
while (index < number.length)
System.out.print(number[index++]);
System.out.println();
}
Problem 18:删除链表的结点
在O(1)时间内删除一个结点
public ListNode deleteNode(ListNode head, ListNode tobeDelete) {
if(head == null || tobeDelete == null)
return null;
if(tobeDelete.next != null) {
ListNode next = tobeDelete.next;
tobeDelete.val = next.val;
tobeDelete.next = next.next;
}else {
if(head == tobeDelete)
head = null;
else {
ListNode cur = head;
while(cur.next != tobeDelete)
cur = cur.next;
cur.next = null;
}
}
return head;
}
删除重复的结点
public ListNode deleteDuplication(ListNode pHead) {
if(pHead == null || pHead.next == null)
return pHead;
ListNode next = pHead.next;
if(pHead.val == next.val) {
while(next != null && pHead.val == next.val)
next = next.next;
return deleteDuplication(next);
}else {
pHead.next = deleteDuplication(pHead.next);
return pHead;
}
}
Problem 19:正则表达式匹配
public boolean match(char[] str, char[] pattern) {
if(str == null || pattern == null)
return false;
int strIndex = 0, patternIndex = 0;
return match(str,pattern,strIndex,patternIndex);
}
public boolean match(char[] str, char[] pattern, int strIndex, int patternIndex) {
if(strIndex == str.length && patternIndex == pattern.length)
return true;
if(strIndex != str.length && patternIndex == pattern.length)
return false;
if(patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') {
if((strIndex != str.length && str[strIndex] == pattern[patternIndex]) || (strIndex != str.length && pattern[patternIndex] == '.'))
return match(str,pattern,strIndex,patternIndex+2) || match(str,pattern,strIndex+1, patternIndex);
else
return match(str,pattern,strIndex,patternIndex+2);
}
if((strIndex != str.length && str[strIndex] == pattern[patternIndex]) || (strIndex != str.length && pattern[patternIndex] == '.'))
return match(str,pattern,strIndex+1,patternIndex+1);
return false;
}
Problem 20:表示数值的字符串
public boolean isNumeric(char[] str) {
if(str == null)
return false;
return new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d*)?");
}