题目## 题目
解题思路
- 读取输入的整数
- 将整数转换为字符串
- 实现颠倒的方法:将字符串反转
- 注意:需要保留前导零
代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string num;
cin >> num;
reverse(num.begin(), num.end());
cout << num << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String num = sc.nextLine();
// 使用StringBuilder反转
StringBuilder sb = new StringBuilder(num);
System.out.println(sb.reverse().toString());
}
}
# 方法1:字符串反转
num = input()
print(num[::-1])
算法及复杂度
- 算法:字符串反转或数字逐位处理
- 时间复杂度: O ( n ) \mathcal{O}(n) O(n) - 其中n为数字的位数
- 空间复杂度: O ( n ) \mathcal{O}(n) O(n) - 需要存储字符串
解题思路
这是一个典型的动态规划问题,可以分为以下几种情况:
- 当苹果数 m = 0 m=0 m=0 或盘子数 n = 1 n=1 n=1 时,只有1种分法
- 当苹果数 m < n m<n m<n 时,必定有 n − m n-m n−m 个盘子为空,等价于把 m m m 个苹果放在 m m m 个盘子中
- 当苹果数
m
>
=
n
m>=n
m>=n 时,可以分两种情况:
- 至少有一个空盘子:相当于 f ( m , n − 1 ) f(m,n-1) f(m,n−1)
- 所有盘子都有苹果:每个盘子先放一个,相当于 f ( m − n , n ) f(m-n,n) f(m−n,n)
代码
#include <iostream>
using namespace std;
class Solution {
public:
int putApple(int m, int n) {
if (m == 0 || n == 1) return 1;
if (m < n) return putApple(m, m);
return putApple(m, n-1) + putApple(m-n, n);
}
};
int main() {
int m, n;
while (cin >> m >> n) {
Solution solution;
cout << solution.putApple(m, n) << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int m = sc.nextInt();
int n = sc.nextInt();
Solution solution = new Solution();
System.out.println(solution.putApple(m, n));
}
}
}
class Solution {
public int putApple(int m, int n) {
if (m == 0 || n == 1) return 1;
if (m < n) return putApple(m, m);
return putApple(m, n-1) + putApple(m-n, n);
}
}
def putApple(m, n):
if m == 0 or n == 1:
return 1
if m < n:
return putApple(m, m)
return putApple(m, n-1) + putApple(m-n, n)
while True:
try:
m, n = map(int, input().split())
print(putApple(m, n))
except:
break
算法及复杂度
- 算法:递归实现的动态规划
- 时间复杂度: O ( m n ) \mathcal{O}(mn) O(mn) - 每个状态最多计算一次
- 空间复杂度: O ( m n ) \mathcal{O}(mn) O(mn) - 递归调用栈的深度
3059

被折叠的 条评论
为什么被折叠?



