c - 请解释一下这个排列算法是如何工作的以及这个回文算法是如何工作的

标签 c algorithm

所以这个函数的工作原理是,如果 n2 是 n1 的排列,则它假设返回 1。如果 n2 可以通过重新排列 n1 的数字来形成,那么它就是 n1 的排列。 (即 237654 是 743526 的排列)。

我不明白发生了什么,如果有人可以逐行解释,我将不胜感激,谢谢。

int is_permutation_division (unsigned long n1, unsigned long n2) 

{
    int a[10] = {0,0,0,0,0,0,0,0,0,0};
    size_t i;

    while (n1 != 0)
    {
        a[n1 % 10]++; // Edit: little syntax error
        n1 /= 10;
    }

    while (n2 != 0)
    {
        a[n2 %10]--;
        n2 /= 10;
    }

    for (i=0; i<10; i++)
    {
        if (a[i] != 0)
        {
            return 0;
        }
    }
    return 1; 
}

下一个函数测试字符串是否是回文。如果一个单词反向拼写相同(即赛车 rac ecar),则该单词是回文

我对我评论过的一行有疑问。我只是想知道它是否是 j-1 因为你不想处理空字符

int is_palindrome(const char s[])

{
size_t i,j;

for (i=0; j<strlen(s); i<j; i++; j--)
{
    if(s[i] != s[j-1]) /*is it j-1 because you don't want to check the null character? */
    {
        return 0;
    }
}
return 1;
}

最佳答案

回文确实是为了避免检查空字符。

关于c - 请解释一下这个排列算法是如何工作的以及这个回文算法是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216171/

相关文章:

使用 pthreads 执行同步和异步通信的 C/C++ 代码

javascript - 如何解释缓存的斐波那契算法的复杂性

python - 使用 Kabsch 算法在 3d 中进行最佳旋转

algorithm - 没有重复的子序列数

algorithm - 计算任何矢量图标的体积中心或光学对齐(质心)的公式?

c - unsigned char 的最大值

c - 在 C 中拆分字符串

c - 将文本文件读入c中的数组

c - 了解 C 宏语法和函数

arrays - 算法:将 2 个数组划分为 "only in A"、 "intersection of A & B"和 "only in B"