2021-01-18

            // max保存的是全局最大子序列和,pre保存的是包含nums[n-1]的n-1序列最大连续子序列
			int max = nums[0];
			int pre = 0;
			for (int i = 1; i < nums.length; i++)
			{
				// 先对pre做维护
				if (nums[i] + pre >= nums[i])// 其实就是前面是个正数
				{
					pre = nums[i] + pre;
				}
				else if (nums[i] + pre < nums[i])
				{
					pre = nums[i];
				}
				// 比较一下新的pre和原来最大的max谁大
				max = Math.max(max, pre);
			}
			return max;
			
class Solution {
public  String multiply(String num1, String num2)
		{
			if (num1.equals("0") || num2.equals("0"))
			{
				return "0";
			}
			StringBuffer[] sb = new StringBuffer[num2.length()];// 最终有下面那个数那么多个
			for (int j = 0; j < num2.length(); j++)
			{
				sb[j] = new StringBuffer();
			}
			int j = num2.length() - 1;
			int k = 0;
			while (j >= 0)
			{
				int i = num1.length() - 1;
				int n2 = num2.charAt(j) - '0';
				int check = 0;
				while (i >= 0)
				{
					int n1 = num1.charAt(i) - '0';
					int temp = n1 * n2 + check;
					check = temp / 10;
					sb[k] = sb[k].append(temp % 10);
					--i;
				}
				if (check > 0)
				{
					sb[k] = sb[k].append(check);
				}
				sb[k] = sb[k].reverse();
				for (int q = 0; q < k; q++)
				{
					sb[k] = sb[k].append("0");
				}
				++k;
				--j;
			}
			StringBuffer sum = new StringBuffer("0");
			for (int p = 0; p < sb.length; p++)
			{
				sum = addStrings(sum, sb[p]);
			}
			return sum.toString();
		}

		public static StringBuffer addStrings(StringBuffer num1, StringBuffer num2)
		{
			StringBuffer sb = new StringBuffer();
			int i = num1.length() - 1, j = num2.length() - 1;
			int check = 0;
			while (i >= 0 || j >= 0)
			{
				// 一长一短的字符串,如果有一个字符串循环结束,则用0补全
				int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
				int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
				int temp = n1 + n2 + check;
				// 如果大于10则,需要进位,此时check为1,不需要进位时,check为0;
				check = temp / 10;
				// 这个时倒叙的结果
				sb = sb.append(temp % 10);
				--i;
				--j;
			}
			// 最终看一下最后一次计算需不需要进位 01+99=100
			if (check == 1)
			{
				sb = sb.append('1');
			}

			return sb.reverse();
		}

}
class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();

        List<Integer> output = new ArrayList<Integer>();
        for (int num : nums) {
            output.add(num);
        }

        int n = nums.length;
        backtrack(n, output, res, 0);
        return res;
    }

    public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) {
        // 所有数都填完了
        if (first == n) {
            res.add(new ArrayList<Integer>(output));
        }
        for (int i = first; i < n; i++) {
            // 动态维护数组
            Collections.swap(output, first, i);
            // 继续递归填下一个数
            backtrack(n, output, res, first + 1);
            // 撤销操作
            Collections.swap(output, first, i);
        }
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页