使用字符数组实现字符串逆序操作。
public static String reverseStr(String str) {
char[] ch = str.toCharArray();
for(int i=0;ilength/2;i++) {
char temp;
temp = ch[i];
;
;
}
return new String(ch);
}
该回答引用GPT:
使用字符数组实现字符串逆序操作:
public static String reverseStr(String str) {
char[] ch = str.toCharArray();
for(int i=0;i<ch.length/2;i++) {
char temp;
temp = ch[i];
ch[i] = ch[ch.length-1-i];
ch[ch.length-1-i] = temp;
}
return new String(ch);
}
如还有疑问,可留言帮助解决。
public static String reverseString(String s) {
char[] chars = s.toCharArray();
int left = 0;
int right = chars.length - 1;
while (left < right) {
// 交换左右指针所指向的元素
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
// 移动左右指针
left++;
right--;
}
return new String(chars);
}
斐波那契数列的定义是 f(n + 1) = f(n) + f(n - 1),生成第 n项的做法有以下几种:
递归法:
原理: 把 f(n)问题的计算拆分成 f(n-1) 和 f(n-2)两个子问题的计算,并递归,以f(0)和f(1) 为终止条件。
缺点: 大量重复的递归计算,例如 f(n)和 f(n - 1)两者向下递归需要 各自计算 f(n - 2) 的值。
记忆化递归法:
原理: 在递归法的基础上,新建一个长度为 n 的数组,用于在递归时存储 f(0)至 f(n)的数字值,重复遇到某数字则直接从数组取用,避免了重复的递归计算。
缺点: 记忆化存储需要使用 O(N)的额外空间。
动态规划:
原理: 以斐波那契数列性质 f(n + 1) = f(n) + f(n - 1)为转移方程。
从计算效率、空间复杂度上看,动态规划是本题的最佳解法。
下图帮助理解递归法的 “重复计算” 概念。