美文网首页
高质量的代码--持续更新

高质量的代码--持续更新

作者: 枫叶忆 | 来源:发表于2019-07-29 22:38 被阅读0次

<h2 id="1">1. 代码质量</h2>

<h3 id="1.1">1.1 代码的规范性</h3>

清晰的书写

清晰的布局

合理的命名

<h3 id="1.2">1.2 代码的完整性</h3>

功能测试

边界测试

负面测试

<h4> 面试题16、数值的整数次方</h4>

初始解法:

double Power(double base, int exponent){
    double result = 1.0;
    for(int i = 1; i <= exponent; i++){
        result *= base;
    }
    return result;
}

以上代码考虑的并不完整,未考虑输入指数(exponent)小于1的情况。

全面但不高效的解法

分析:当指数为负数时,可以先对指数取绝对值,算出结果后再取倒数。还需要考虑底数为0,指数为负数的情况,针对这种错误,有3种处理办法:返回值、全局变量和异常。

bool g_InvalidInput = false;
double Power(double base, int exponent){
    g_InvalidInput = false;
    if(equal(base, 0.0) && exponent < 0){
        g_InvalidInput = true;
        return 0.0;
    }
    unsigned int absExponent = (unsigned int)exponent;
    if(exponent < 0){
        absExponent = (unsigned int)(-exponent);
    }
    
    double result = PowerWithUnsignedExponent(base, absExponent);
    if(exponent < 0){
        result = 1.0/result;
    }
    return result;
}

double PowerWithUnsignedExponent(double base, unsigned int exponent){
    double result = 1.0;
    for(int i = 0; i <= exponent; i++){
        result *= base;
    }
    return result;
}

上述代码采用全局变量来标识是否出错。但是代码需要调用者去检查全局变量以判断是否出错。

全面又高效的解法

分析:对次方进行拆解,使用递归实现

公式:

a^n=\left\{
\begin{aligned}
a^{n/2}*a^{n/2} \text{, n为偶数}\\ 
a^{(n-1)/2}*a^{(n-1)/2}  \text{, n为奇数}
\end{aligned}
\right.
double PowerWithUnsignedExponent(double base, unsigned int exponent){
    if(exponent == 0){
        return 1;
    }
    if(exponent == 1){
        return base;
    }
    
    double result = PowerWithUnsignedExponent(base, exponent>>1);
    result *= result;
    if(exponent & 0x1 == 1){
        result *= base;
    }
}

细节
用右移运算替代除以2,用位运算符替代求余来判断奇数偶数。提高了执行效率。

<h3 id="1.3">1.3 代码的鲁棒性</h3>

<h2 id="2">2. 结语</h2>

<h2 id="3">3. 参考文献</h2>

剑指offer

相关文章

  • 高质量的代码--持续更新

    1. 代码质量1.1 代码的规范性1.2 代码的完整性1.3 代码的鲁棒性 2.结语 3.参考文献 1. 代码质量...

  • 编写高质量代码 - Java

    参考 编写高质量代码:改善Java程序的151个建议 持续更新、Java、笔记 1.使用 long 类型时注意使用...

  • Leetcode 88. Merge Sorted Array

    Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 21. Merge Two Sorted Li

    Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 9. Palindrome Number

    Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 4. Median of Two Sorted

    Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 64: Minimum Path Sum

    动态规划 Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 7. Reverse Integer

    整型反转,Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 132. Palindrome Partiti

    动态规划,Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

  • Leetcode 120. Triangle

    动态规划,Python 3 实现: 源代码已上传 Github,持续更新。 源代码已上传至 Github,持续更新中。

网友评论

      本文标题:高质量的代码--持续更新

      本文链接:https://www.haomeiwen.com/subject/inhwrctx.html