鱼C论坛

 找回密码
 立即注册
查看: 1052|回复: 4

函数返回值

[复制链接]
发表于 2021-3-7 08:26:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一世轻尘 于 2021-3-7 14:00 编辑
  1. int ispalindromic(char* s,int i,int j,int** f)//用二维数组存储对应字符串是否为回文串
  2. {
  3.     if(f[i][j])
  4.         return f[i][j];
  5.     if(i>=j)
  6.         return f[i][j]=1;
  7.     return f[i][j]=(s[i]==s[j]?ispalindromic(s,i+1,j-1,f):-1);
  8. }
复制代码


问一下这个
  1. return f[i][j]=1;
复制代码
的作用是啥,是让整个函数的返回值为1,还是仅仅将1赋值给
  1. f[i][j]
复制代码
,还是其它的作用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-7 09:55:42 | 显示全部楼层
把完整的代码贴出来,可以直接运行调试的那种
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-7 10:18:10 | 显示全部楼层
人造人 发表于 2021-3-7 09:55
把完整的代码贴出来,可以直接运行调试的那种


没有主函数,正在研究这个解法,还没看懂,我感觉完整代码跟问题没啥关系
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
  ["aa","b"],
  ["a","a","b"]
]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-7 10:20:29 | 显示全部楼层
人造人 发表于 2021-3-7 09:55
把完整的代码贴出来,可以直接运行调试的那种
  1. // 记忆化搜索中,f[i][j] = 0 表示未搜索,1 表示是回文串,-1 表示不是回文串
  2. int isPalindrome(char* s, int** f, int i, int j) {
  3.     if (f[i][j]) {
  4.         return f[i][j];
  5.     }
  6.     if (i >= j) {
  7.         return f[i][j] = 1;
  8.     }
  9.     return f[i][j] = (s[i] == s[j] ? isPalindrome(s, f, i + 1, j - 1) : -1);
  10. }
  11. void dfs(char* s, int n, int i, int** f, char*** ret, int* retSize, int* retColSize, char** ans, int* ansSize) {
  12.     if (i == n) {
  13.         char** tmp = malloc(sizeof(char*) * (*ansSize));
  14.         for (int j = 0; j < (*ansSize); j++) {
  15.             int ansColSize = strlen(ans[j]);
  16.             tmp[j] = malloc(sizeof(char) * (ansColSize + 1));
  17.             strcpy(tmp[j], ans[j]);
  18.         }
  19.         ret[*retSize] = tmp;
  20.         retColSize[(*retSize)++] = *ansSize;
  21.         return;
  22.     }
  23.     for (int j = i; j < n; ++j) {
  24.         if (isPalindrome(s, f, i, j) == 1) {
  25.             char* sub = malloc(sizeof(char) * (j - i + 2));
  26.             for (int k = i; k <= j; k++) {
  27.                 sub[k - i] = s[k];
  28.             }
  29.             sub[j - i + 1] = '\0';
  30.             ans[(*ansSize)++] = sub;
  31.             dfs(s, n, j + 1, f, ret, retSize, retColSize, ans, ansSize);
  32.             --(*ansSize);
  33.         }
  34.     }
  35. }

  36. char*** partition(char* s, int* returnSize, int** returnColumnSizes) {
  37.     int n = strlen(s);
  38.     int retMaxLen = n * (1 << n);
  39.     char*** ret = malloc(sizeof(char**) * retMaxLen);
  40.     *returnSize = 0;
  41.     *returnColumnSizes = malloc(sizeof(int) * retMaxLen);
  42.     int* f[n];
  43.     for (int i = 0; i < n; i++) {
  44.         f[i] = malloc(sizeof(int) * n);
  45.         for (int j = 0; j < n; j++) {
  46.             f[i][j] = 1;
  47.         }
  48.     }
  49.     for (int i = n - 1; i >= 0; --i) {
  50.         for (int j = i + 1; j < n; ++j) {
  51.             f[i][j] = (s[i] == s[j]) && f[i + 1][j - 1];
  52.         }
  53.     }
  54.     char* ans[n];
  55.     int ansSize = 0;
  56.     dfs(s, n, 0, f, ret, returnSize, *returnColumnSizes, ans, &ansSize);
  57.     return ret;
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-7 10:55:52 | 显示全部楼层

你给我一个这不能运行调试的代码,我也没办法,告诉我代码的出处也行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 04:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表