题解 | #牛的回文编号II#

牛的回文编号II

https://www.nowcoder.com/practice/0b576fd673834425878b99c736bb6c34

考察的知识点:字符串的处理,回文

题目解析

1、先判断传的字符传是否符合农夫的编码规范

2、利用小数点找出前后数字,分别判断是否是回文

采用的编程语言:C

完整的编码代码:如下所示

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param x string字符串 
 * @return bool布尔型
 */
bool isPalindromeNumber(char* x ) {
    int posi = 0, left_posi = -1, right_posi = -1;
    int len = 0;
    int flag = 1;

    if (x == NULL)
        return false;

    len = strlen(x);

    for (int i = 0; i < len; i++) {
        if (x[i] == '.')	// 找到小数点的位置
            posi = i;
        else if (x[i] != '0' && left_posi == -1)	// 找到小数点左边非0的数字的位置
                left_posi = i;
        else if (x[i] == '0' && left_posi != -1 && right_posi == -1) {		// 找到小数点右边非0数字
                right_posi = i-1;	// x[i]此时的数字是0,所有需要减去1获取上一个非0的数字
                break;
        }
    }

  /* 判断小数点左边的数字是否是回文 */
    for (int i = left_posi; i < posi; i++) {
        if (x[i] != x[posi-i-1]) {		//posi需要减去1,才是整数部分最后一个数字
            flag = 0;
            break;
        }
    }

  /* 判断小数点右边是否是回文 */
    if (flag) {		// 如果小数点左边的数字已经判断为非回文,这里就无须判断小数部分
        for (int i = (posi+1); i < right_posi; i++) {		// posi加一才是小数点右边的第一个数字
            if (x[i] != x[right_posi-i]) {
                flag = 0;
                break;
            }
        }
    }

    if (flag)
        return true;
    else
        return false;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务